Я работаю над сайд-проектом для одного из моих клиентов, который отправит им текст (через Twilio), когда они получат новый чат в чате. Это вебхук (документы здесь) отправляет информацию о посетителях вместе с их ответами на предварительный опрос. Я могу отправить основное сообщение типа «Новый чат на вашем сайте!» но не любые переменные данные. Вот начало моего кода:
<?php
$data = file_get_contents('php://input');
$data = json_decode($data);
// this line loads the library
require './twilio/Services/Twilio.php';
$account_sid = $sid;
$auth_token = $token;
$client = new Services_Twilio($account_sid, $auth_token);
try {
$message = $client->account->messages->create(array(
"From" => "+12677932737",
"To" => "5555555555",
"Body" => $data,
));
} catch (Services_Twilio_RestException $e) {
$error = $e->getMessage();
}
?>
Спасибо!
Похоже, вы пытаетесь отправить весь $data
как тело сообщения.
Согласно REST документы для Twilio, Body
переменная может быть только 160 символов (нормальная длина SMS).
При просмотре ссылки, которую вы указали для веб-хуков LiveChat, вы можете получить несколько различных объектов данных:
Пример простой веб-ловушки при запуске чата:
{
"event_type": "chat_started",
"token": "27f41c8da685c81a890f9e5f8ce48387",
"license_id": "1025707"}
Чат начинается с информации о посетителе:
{
"event_type": "chat_started",
"token": "27f41c8da685c81a890f9e5f8ce48387",
"license_id": "1025707",
"visitor": {
"id": "S1354547427.0c151b0e1b",
"name": "John",
"email": "[email protected]"}
}
Веб-перехват сообщения чата:
"chat": {
"id":"MH022RD0K5",
"started_timestamp":1358937653,
"ended_timestamp":1358939109,
"messages":[
{
"user_type":"agent",
"author_name":"John Doe",
"agent_id":"[email protected]",
"text":"Hello",
"timestamp":1358937653
},
{
"user_type":"supervisor",
"author_name":"James Doe",
"agent_id":"[email protected]",
"text":"This is whispered message.",
"timestamp":1358937658
},
{
"user_type":"visitor",
"author_name":"Mary Brown",
"text":"How are you?",
"timestamp":1358937661
},
tags:[
"sales",
"support",
"feedback"]
]
}
Все они, кроме первого, содержат более 160 символов. Так что, если вы отправляете необработанное тело запроса, Twilio не примет его.
Вместо этого вы можете просто вернуть собственное тело в зависимости от того, какую информацию вы хотите отправить в Twilio.
Например, вы можете сделать:
$body = "Chat started with: {$data->visitor->name}";
Или вы можете отправить первое сообщение:
$body = "Chat message: {$data->chat->messages[0]->text}";
Тогда последнее, что вы должны сделать, это обрезать сообщение до 160 символов или разбить его на страницы, чтобы ваше сообщение не потерялось.
Простая отделка будет:
if (strlen($body) > 160) {
$body = substr($body, 0, 156) + '...';
}
// Then send the $body off to Twilio
Других решений пока нет …