Я работаю над автоматизацией процесса, в котором я работаю у поставщика управляемых услуг. Я пытаюсь отправить сообщение пользователю, когда у него запоздалый билет в службу поддержки. Когда это происходит, я запускаю следующий скрипт PHP (упрощенно для этого примера):
<?php
$attachments = array(
"fallback" => "Attachment 1 Fallback",
"title" => "This is Attachment 1",
"text" => "Attachment 1 text",
"color" => "95baa9");
$ch = curl_init("https://slack.com/api/chat.postMessage");
$data = http_build_query([
"token" => "xoxb-0000000000-00000000000", //omitting my token
"channel" => "@johnsmith",
"text" => "Here's some text!",
"attachments" => json_encode($attachments),
"as_user" => "true"]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
return $result;
Кажется, все работает, кроме вложений. Когда я запускаю этот скрипт, я получаю сообщение без вложения, только text
, Я сейчас пользуюсь json_encode
потому что вложенность массива внутри $data
массив не работал.
Мне было интересно, если кто-то может указать мне в правильном направлении. Я попробовал несколько вариантов, но не могу, кажется, прибить этот.
От документация:
Основанный на JSON массив структурированных вложений, представленных в виде строки в кодировке URL.
Пример ожидаемой стоимости из документации:
[{"pretext": "pre-hello", "text": "text-world"}]
Таким образом, вы должны изменить свой $attachments
переменная к этому:
$attachments = array(
array(
"fallback" => "Attachment 1 Fallback",
"title" => "This is Attachment 1",
"text" => "Attachment 1 text",
"color" => "95baa9")
);
Вот каков результат json_encode
будет (тот же формат, что и документация):
[{"fallback":"Attachment 1 Fallback","title":"This is Attachment 1","text":"Attachment 1 text","color":"95baa9"}]
И вот как у вас сейчас выглядит:
{"fallback":"Attachment 1 Fallback","title":"This is Attachment 1","text":"Attachment 1 text","color":"95baa9"}
Других решений пока нет …