2016-12-06 10 views
2

Рассмотрим есть ответ действия карты из MS бота & это выглядит следующим образом в скайпе: enter image description hereКак я могу интерпретировать/воспринимать наличие кнопок в ответе directline api?

Когда аналогичный ответ приходит в REST API, то есть с использованием API-интерфейсов Direct Line. Ниже приведена соответствующая часть ответа JSON.

{ 
    "id": "1t90Ym3PEry|000000000000000014", 
    "conversationId": "1t90Ym3PEry", 
    "created": "2016-12-06T09:34:55.6280699Z", 
    "from": "rich3cards", 
    "images": [ 
    "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Seattlenighttimequeenanne.jpg/320px-Seattlenighttimequeenanne.jpg" 
    ], 
    "attachments": [], 
    "eTag": "W/\"datetime'2016-12-06T09%3A34%3A54.94083Z'\"" 
}, 
{ 
    "id": "1t90Ym3PEry|000000000000000014", 
    "conversationId": "1t90Ym3PEry", 
    "created": "2016-12-06T09:34:55.6280699Z", 
    "from": "rich3cards", 
    "text": "Hero Card\n\nSpace Needle\n\nThe <b>Space Needle</b> is an observation tower in Seattle, Washington, a landmark of the Pacific Northwest, and an icon of Seattle.\n\n(Current Weather) action?weather=Seattle, WA", 
    "images": [], 
    "attachments": [], 
    "eTag": "W/\"datetime'2016-12-06T09%3A34%3A54.94083Z'\"" 
} 

Теперь вопрос о том, как мы разобрать этот JSON, чтобы получить данные кнопки [(Current Weather) action?weather=Seattle, WA"] из атрибута text? Является ли единственный способ совпадения теста?

Кто-нибудь сталкивался или знает решение, пожалуйста, поставить некоторый свет здесь тоже;)


Update: Если его другой канал, как скайп/чата/и т.д .. ответ JSON выглядит очень уместно потреблять, Ниже приведен образец JSON.

{ 
    "type": "message", 
    "id": "5AdoK89rtSc|000000000000000018", 
    "timestamp": "2016-12-06T09:53:20.4777291Z", 
    "channelId": "webchat", 
    "from": { 
    "id": "rich3cards", 
    "name": "RichCards" 
    }, 
    "conversation": { 
    "id": "5AdoK89rtSc" 
    }, 
    "attachments": [ 
    { 
     "contentType": "application/vnd.microsoft.card.hero", 
     "content": { 
     "title": "Hero Card", 
     "subtitle": "Space Needle", 
     "text": "The <b>Space Needle</b> is an observation tower in Seattle, Washington, a landmark of the Pacific Northwest, and an icon of Seattle.", 
     "images": [ 
      { 
      "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Seattlenighttimequeenanne.jpg/320px-Seattlenighttimequeenanne.jpg" 
      } 
     ], 
     "buttons": [ 
      { 
      "type": "postBack", 
      "value": "action?weather=Seattle, WA", 
      "title": "Current Weather" 
      } 
     ] 
     } 
    } 
    ] 
+0

Использует ли DirectLine v1 .1 или v3? –

+0

DirectLine v1.1 –

+0

Возможный дубликат [Direct Line API - Платформа Bot/Герои и вложения] (http://stackoverflow.com/questions/40852909/direct-line-api-bot-framework-hero-cards-and -attachments) –

ответ

2

Как указано в комментариях, вы используете DirectLine v1.1. К сожалению, v1.1 не поддерживает вложения/карты и поэтому нет хорошего способа понять/разобрать карту.

Возможно, вы захотите рассмотреть возможность перехода на DirectLine v3, который имеет полную поддержку вложений.

enter image description here

В качестве альтернативы, если вы хотите поддерживать карты, вы могли бы сделать что-то на заказ, как показано в DirectLine образце. Там бот sending the hero card через поле ChannelData, а клиент - parsing that соответственно. Однако вам может потребоваться добавить логику, чтобы определить, кто разговаривает с ботом, поэтому вы отправляете карты в качестве ChannelData только в том случае, если вызывающий объект является DirectLine, а не одним из других клиентов (например, skype).