示例#1
0
        public async Task <IActionResult> Index(int botId)
        {
            try
            {
                var viberBotClient = viberBotFactory.GetClient(botId);

                var body = await new StreamReader(Request.Body).ReadToEndAsync();

                var signatureHeader = Request.Headers[ViberBotClient.XViberContentSignatureHeader];

                var isSignatureValid = viberBotClient.ValidateWebhookHash(signatureHeader, body);

                if (!isSignatureValid)
                {
                    throw new InvalidOperationException("Invalid signature");
                }

                // Deserialize JSON callback data
                var callbackData = JsonConvert.DeserializeObject <CallbackData>(body);

                //
                var user = callbackData.User;

                switch (callbackData.Event)
                {
                case EventType.ConversationStarted:
                    await botService.ConversationStarted(botId, user.Id, user.Name, user.Avatar);

                    break;

                case EventType.Subscribed:
                    await botService.Subscribed(botId, user.Id);

                    break;

                case EventType.Unsubscribed:
                    await botService.UnSubscribed(botId, callbackData.UserId);

                    break;

                case EventType.Message:
                    await botService.ReceiveMessage(botId, callbackData.Sender.Id, callbackData.MessageToken, callbackData.Message);

                    break;
                }

                return(Ok());
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Error: {ex.Message}", ex.Message);

                return(BadRequest(ex.Message));
            }
        }
        public SendMessageService(IBotFactory <IViberBotClient> viberBotFactory)
        {
            var botId = 1;

            this.viberBotClient = viberBotFactory.GetClient(botId);
        }