11

Poison を使用してマップを JSON にエンコードし、マップを Slack API に送信します。これはPoisonが私に与えるものです:

"{\"text\":\"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296\"}"

それを JSON lint に入れると、有効な JSON であると表示されますが、Slack は「無効なペイロード」と応答します。

JSONを次のように変更すると

{"text":"changed readme fad996e98e04fd4a861840d92bdcbbcb1e1ec296"}

その後、動作します。これでどこが間違っているのか誰にもわかりますか?エンコードされた JSON に対して追加の処理を行う必要がありますか、それとも設定する必要があるヘッダーがありますか?

これが私のコントローラーです

def create(conn, opts) do
    message = Message.create_struct(opts)
    response = Slack.Messages.send(message)

    case response do
      {:ok, data} ->
        render conn, json: Poison.encode!(data)
      {:error, reason} ->
        render conn, json: reason
    end
end

これは、メッセージを送信するためのライブラリの一部です

defmodule Slack.Messages do

  def format_simple_message(map) do
    text = map.description <> " " <> map.commits
    message = %{text: text}
  end

  def post_to_slack(map) do
    Slack.post(:empty, map)
  end

  def send(map) do
    map
    |> format_simple_message
    |> post_to_slack
  end

end

そして私のHTTPoison処理

defmodule Slack do
  use HTTPoison.Base

  @endpoint "http://url.com"

  def process_url() do
    @endpoint
  end

  def process_response_body(body) do
    body
    |> Poison.decode! # Turns JSON into map
  end

  def process_request_body(body) do
    body
    |> Poison.encode! # Turns map into JSON
  end
end

JSON を作成する部分は最後のブロックにあります。

4

1 に答える 1