Задать вопрос
@IgorusKr

Одноклассники как отправить сообщение с вложением по Graph Api?

Приветствую! Пишу бота на C# для Одноклассников и столкнулся с такой проблемой: сообщение с вложением не отправляется, возвращая ошибку о неправильном формате Json.

В идеале я хочу отправлять сообщение с текстом и клавиатурой(набором кнопок) в качестве вложения.
Вот мой код:
var requestParams = new
{
    recipient = new { chat_id = chatId },
    message = new
    {
        text = "Текст",
        attachment = new
        {
            Type = "INLINE_KEYBOARD",
            payload = new
            {
                keyboard = new
                {
                    buttons = new[]
                    {
                        new[]
                        {
                            new
                            {
                                type = "CALLBACK",
                                text = "Button",
                                intent = "DEFAULT",
                                payload = "Button"
                            }
                        }
                    }
                },
                callbackId = "16ef50d9a4e00c516ef50d9a4e00c516ef50d9a4e00c5"
            }
        }
    }
};
string requestUrl = s_baseUrl + "/me/messages/" + chatId + "?access_token=" + _token;
string requestParamsJson = JsonConvert.SerializeObject(requestParams);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, requestUrl);
request.Content = new StringContent(requestParamsJson,
                                    Encoding.UTF8,
                                    "application/json");

var response = await _httpClient.SendAsync(request)
    .ContinueWith(responseTask => responseTask.Result.EnsureSuccessStatusCode());

string responseContentJson = await response.Content.ReadAsStringAsync();


В данном примере s_baseUrl = "https://api.ok.ru/graph"

Откуда брать callbackId не совсем понятно, в примере выше взят из документации. Но что с ним, что без него(с пустой строкой) в ответ я получаю Json с ошибкой:

{
	"error_code": 2001,
	"error_msg": "GRAPH_PARAM_REQUEST : Wrong JSON format.",
	"error_data": null
}


Притом без вложения, только с текстом, сообщение отправляется, но стоит добавить любое вложение(не обязательно клавиатуру) и я получаю ошибку. Даже если взять пример напрямую из документации и скопировать Json отправки картинки(заменив chat_id, естественно):
{
  "recipient":{"chat_id":"chat:C3ecb9d02a600"},                     /* ID чата в формате chat:id */
  "message":{                                                       /* Содержание сообщения */
    "attachment":{
      "type":"IMAGE",
      "payload":{"url":"https://st.mycdn.me/res/i/ok_logo.png"}     /* URL изображения в формате jpg или png */
    }
  }
}

Всё равно получаю вышеописанную ошибку.

Подскажите, пожалуйста, в чём может быть дело? Уже все Json'ы по 10 раз перепроверил.
Заранее спасибо!
  • Вопрос задан
  • 200 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@IgorusKr Автор вопроса
Пусть и поздно, но отпишусь: с проблемой разобрался.

После очередной перепроверки отправляемого Json, обнаружил, что свойство Type во вложении было написано с большой буквы. В моём случае проблема была в этом.

Однако всё равно нужно быть очень внимательным, т.к. есть много неочевидных моментов. Помимо регистрозависимости, например, свойство attachments всегда должно быть массивом (поэтому пример из документации и не работал, там attachments -- один объект ). Также нельзя передавать никаких "лишних" свойств, и так далее. В общем, если проверили Json 100 раз, перепроверьте в 101-й.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы