Доброго времени суток. Пишу бота для Skype на PHP. Раньше у него был свой API, но сейчас сделать это можно только через Microsoft Bot Framework.
Что сделал:
- Зарегистрировался в MS Azure, оформил бесплатную подписку
- Создал бота, добавил пароль (получил ид приложения и пароль), указал Message endpoint (ссылка, по которой будут лететь сообщения от пользователей)
- Написал скрипт, который отправляет "123" в ответ на любое сообщение
Скрипт делает следующее:
- Получает входные данные
- Отправляет запрос на получение токена
- Отправляет ответное сообщение
Данные скрипту приходят, токен авторизации получается получается, а вот с отправкой сообщения возникли проблемы - в ответ на запрос приходит "1", но сообщение в диалоге не появляется. Пробовал через вебчат для теста в MS Azure и через скайп.
Код:
<?php
$client_id = 'aaaaaaaa-bbbb-4444-acc1-f000000081b0';
$client_secret = 'sbjpfcxagfd19:ibEIB3*[#';
$authRequestUrl = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';
$request = file_get_contents("php://input");
$input = json_decode($request, true);
$authRequestOptions = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query(
array(
'grant_type' => 'client_credentials',
'client_id' => $client_id, //ID приложения
'client_secret' => $client_secret, //Пароль приложения
'scope' => 'https://graph.microsoft.com/.default'
)
)
)
);
$authRequestContext = stream_context_create($authRequestOptions);
$authResult = file_get_contents($authRequestUrl, false, $authRequestContext);
$authData = json_decode($authResult, true);
$deserializedResponseActivity = array(
//Мы отвечаем обычным сообщением
'type' => 'message',
//Сообщаем id и имя участника чата (берем из полей recipient->id и recipient->name входящего POST-запроса с сообщением, то есть id и name, которым было адресовано входящее сообщение)
'from' => array(
'id' => (string)$input['recipient']['id'],
'name' => (string)$input['recipient']['name']
),
//Устанавливаем id беседы, в которую мы отвечаем (берем из поля conversation->id входящего POST-запроса с сообщением)
'conversation' => array(
'id' => (string)$input['conversation']['id']
),
//Устанавливаем id и имя участника чата, к которому обращаемся, он отправил нам входящее сообщение (берем из полей from->id и from->name входящего POST-запроса с сообщением)
'recipient' => array(
'id' => (string)$input['from']['id'],
'name' => (string)$input['from']['name']
),
//Текст ответа на сообщение
// 'text' => $message,
'text' => '123',
//Устанавливаем внутренний ID активности, в контексте которого мы находимся (берем из поля id входящего POST-запроса с сообщением)
'replyToId' => (string)$input['id']
);
$responseActivityRequestUrl = rtrim($input['serviceUrl'], '/') . '/v3/conversations/' . $deserializedResponseActivity['conversation']['id'] . '/activities/' . urlencode($deserializedResponseActivity['replyToId']);
$ch = curl_init($responseActivityRequestUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($deserializedResponseActivity));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: ' . $authData['token_type'] . ' ' . $authData['access_token'],
'Content-Type: application/json'
));
$result = curl_exec($ch);
curl_close($ch);
В чем может быть ошибка?