Интеграция слабого бота через ASP.NET CORE API C # - PullRequest
0 голосов
/ 26 ноября 2018

Я работаю над созданием слабого бота с использованием ASP.NET Core API C #.Я успешно могу использовать команду слеш и отправлять сообщения, используя входящие веб-хуки.Одно из требований, которое у меня есть, - это открыть диалог нажатием кнопки.Я пробовал разные способы получить это, но я не могу найти правильный способ открыть Dailog из API.Я уже просмотрел документацию на https://api.slack.com/dialogs, но не смог открыть dailog.

Буду признателен за любую помощь !!

ниже - один из способов, которые я попробовал:

namespace SlackAPICore.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ButtonEventController : ControllerBase
{
    [HttpPost]
    [Produces("application/json")]
    public void HandleCommand(string slashCommandPayload)
    {            
        var response_url = JsonConvert.DeserializeObject<response_Url> Request.Form["payload"]);
        string eventUrl = "https://slack.com/api/dialog.open?token=" + response_url.token+ "&trigger_id="+ response_url.trigger_id;
        SlackClient client = new SlackClient(eventUrl);
        string readContents="";
        using (StreamReader streamReader = new StreamReader("E:\\slack\\SlackAPICore\\SlackAPICore\\JSONData\\newEvent.json", Encoding.UTF8))
        {
            readContents = streamReader.ReadToEnd();
        }            

        client.PostMessage(JsonConvert.SerializeObject(readContents));
    }
}

public class response_Url
{
    public string response_url { get; set; }
    public string trigger_id { get; set; }
    public string token { get; set; }
}

}

Slack Код клиента:

public class SlackClient
{
    private readonly Uri _uri;
    private readonly Encoding _encoding = new UTF8Encoding();

    public SlackClient(string urlWithAccessToken)
    {
        _uri = new Uri(urlWithAccessToken);
    }
    //Post a message using a Payload object
    public void PostMessage(string payload)
    {
        using (WebClient client = new WebClient())
        {
            NameValueCollection data = new NameValueCollection();
            data["payload"] = payload;
            var response = client.UploadValues(_uri, "POST", data);
            client.DownloadData(_uri);
            //The response text is usually "ok"
            string responseText = _encoding.GetString(response);
        }
    }
}

образец файла JOSN:

{"dialog": {
"callback_id": "ryde-46e2b0",
"title": "Request a Ride",
"submit_label": "Request",
"notify_on_cancel": true,
"state": "Limo",
"elements": [
  {
    "type": "text",
    "label": "Pickup Location",
    "name": "loc_origin"
  },
    {
        "type": "text",
        "label": "Dropoff Location",
        "name": "loc_destination"
    }
]

}}

Заранее спасибо

...