Exemplo n.º 1
0
        public async Task <ApiResponse> Send([FromForm] MessageFormData form)
        {
            Hibaza.CCP.Data.Common _cm = new Hibaza.CCP.Data.Common();
            var para    = JsonConvert.DeserializeObject <dynamic>(form.para);
            var channel = _channelService.GetById(form.business_id, form.channel_id);

            #region luu hinh anh den server rieng
            try
            {
                if (form.channel_format == "image-text" || form.channel_format == "image" || form.channel_format == "receipt")
                {
                    if (para.message != null && para.message.attachment != null && para.message.attachment.payload != null && para.message.attachment.payload.elements != null)
                    {
                        List <payloadFb> elements = JsonConvert.DeserializeObject <List <payloadFb> >(JsonConvert.SerializeObject(para.message.attachment.payload.elements));
                        for (var i = 0; i < elements.Count; i++)
                        {
                            try
                            {
                                if (!string.IsNullOrWhiteSpace(elements[i].image_url))
                                {
                                    var newImageUrl = await ImagesService.UpsertImageStore(elements[i].image_url, _appSettings.Value);

                                    para.message.attachment.payload.elements[i].image_url          = newImageUrl;
                                    para.message.attachment.payload.elements[i].default_action.url = newImageUrl;
                                }
                            }
                            catch (Exception ex) { }
                        }
                    }

                    #region file attachment
                    // var data = new MessageData { images = new List<MessageFile>() };
                    var files = Request.Form.Files;
                    var j     = 0;
                    if (files.Count > 0)
                    {
                        foreach (var file in files)
                        {
                            if (file.Length > 0)
                            {
                                var fileName = ContentDispositionHeaderValue
                                               .Parse(file.ContentDisposition)
                                               .FileName.ToString();
                                fileName = Core.Helpers.CommonHelper.removeSpecialFile(fileName);

                                var fileId = "";
                                if ((form.thread_id + fileName).Length < 100)
                                {
                                    fileId = form.thread_id + "_" + Core.Helpers.CommonHelper.GenerateDigitUniqueNumber() + "_" + fileName;
                                }
                                else
                                {
                                    fileId = form.thread_id + "_" + fileName;
                                }
                                // var path = Path.Combine(Directory.GetCurrentDirectory(), @"Documents", "Attachments", fileId);
                                var dir      = Path.Combine(Directory.GetCurrentDirectory(), _appSettings.Value.PathToFileDocuments);
                                var fullName = Path.Combine(dir, fileId);

                                if (!Directory.Exists(dir))
                                {
                                    Directory.CreateDirectory(dir);
                                }

                                using (FileStream fs = System.IO.File.Create(fullName))
                                {
                                    file.CopyTo(fs);
                                    fs.Flush();
                                }
                                var bytes  = _cm.ConvertToBytes(file);
                                var newUrl = await _cm.HtmlPostBytesAsync <string>(_appSettings.Value.BaseUrls.ApiSaveImage
                                                                                   + "api/UploadFile", form.thread_id + "_" + file.FileName, bytes);

                                var elements = JsonConvert.DeserializeObject <List <payloadFb> >(JsonConvert.SerializeObject(para.message.attachment.payload.elements));

                                para.message.attachment.payload.elements[j].image_url = newUrl;
                                para.message.attachment.payload.elements[j].title     = para.message.attachment.payload.elements[j].title == "" ?
                                                                                        channel.name : para.message.attachment.payload.elements[j].title;
                                para.message.attachment.payload.elements[j].default_action.url = newUrl;
                                j++;

                                //var bytes = _cm.ConvertToBytes(file);
                                //var newUrl = await _cm.HtmlPostBytesAsync<string>(_appSettings.Value.BaseUrls.ApiSaveImage
                                //    + "File_DocumentsView/UploadFile", thread.id + "_" + file.FileName, bytes);

                                //var elements = JsonConvert.DeserializeObject<List<payloadFb>>(JsonConvert.SerializeObject(para.message.attachment.payload.elements));

                                //para.message.attachment.payload.elements[j].image_url = newUrl;
                                //para.message.attachment.payload.elements[j].default_action.url = newUrl;
                                //para.message.attachment.payload.elements[j].title = para.message.attachment.payload.elements[j].title == "" ?
                                //    channel.name : para.message.attachment.payload.elements[j].title;
                                //j++;
                            }
                        }
                    }
                    #endregion
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            #endregion
            // _logService.Create(new Log { name = "send zalo ", message = "", details = JsonConvert.SerializeObject(para).ToString() });
            return(await _zaloService.SendMessage(para, channel, form));
        }
Exemplo n.º 2
0
        public async Task <ApiResponse> SendMessage(dynamic para, Channel channel, MessageFormData form)
        {
            var response = new ApiResponse();

            try
            {
                var recipient_id = form.recipient_id;
                var type         = form.channel_format;

                if (string.IsNullOrWhiteSpace(recipient_id) || string.IsNullOrWhiteSpace(type) || string.IsNullOrWhiteSpace(form.business_id) || string.IsNullOrWhiteSpace(form.channel_id))
                {
                    return(response);
                }

                JObject rs        = null;
                var     timestamp = Core.Helpers.CommonHelper.DateTimeToUnixTimestamp(DateTime.UtcNow);

                var zalo = new ZaloMessage();
                zalo.oaid      = Convert.ToInt64(channel.ext_id);
                zalo.touid     = Convert.ToInt64(recipient_id);
                zalo.timestamp = timestamp;
                zalo.@event    = type == "text" || type == "message" ? "sendmsg" : "sendimagemsg";

                if (type == "text" || type == "message")
                {
                    rs = await SendText(form.message, recipient_id, channel.ext_id, channel.token, timestamp);

                    if ((string)rs["errorCode"] == "1")
                    {
                        zalo.message = form.message;
                        zalo.msgid   = (string)rs["data"]["msgId"];
                        response.ok  = true;

                        try
                        {
                            BackgroundJob.Enqueue <ZaloConversationService>(x => x.SaveWebhookMessaging(zalo, recipient_id, true, channel));
                            //ZaloConversationService conversationService = new ZaloConversationService(_channelService, _threadService, _agentService, _customerService, _messageService, _appSettings, _logService);
                            //conversationService.SaveWebhookMessaging(zalo, recipient_id, true, channel).Wait();
                        }
                        catch (Exception ex)
                        {
                            //BackgroundJob.Enqueue<ZaloConversationService>(x => x.SaveWebhookMessaging(zalo, recipient_id, true, channel));
                            _logService.Create(new Log {
                                name = "send zalo error 1", message = ex.Message + JsonConvert.SerializeObject(ex.StackTrace).ToString(), details = JsonConvert.SerializeObject(zalo).ToString()
                            });
                            throw ex;
                        }
                    }
                }
                else
                {
                    List <payloadFb> elements = JsonConvert.DeserializeObject <List <payloadFb> >(JsonConvert.SerializeObject(para.message.attachment.payload.elements));
                    for (var i = 0; i < elements.Count; i++)
                    {
                        var imageByte = await Core.Helpers.WebHelper.HttpGetAsyncByte(elements[i].image_url);

                        rs = await SendImage(imageByte, elements[i].title, recipient_id, channel.ext_id, channel.token, timestamp);

                        if ((string)rs["errorCode"] == "1")
                        {
                            response.ok  = true;
                            zalo.message = elements[i].title;
                            zalo.href    = elements[i].image_url;
                            zalo.msgid   = (string)rs["data"]["msgId"];

                            try
                            {
                                BackgroundJob.Enqueue <ZaloConversationService>(x => x.SaveWebhookMessaging(zalo, recipient_id, true, channel));
                            }
                            catch (Exception ex)
                            {
                                //BackgroundJob.Enqueue<ZaloConversationService>(x => x.SaveWebhookMessaging(zalo, recipient_id, true, channel));
                                _logService.Create(new Log {
                                    name = "send zalo error 2", message = ex.Message + JsonConvert.SerializeObject(ex.StackTrace).ToString(), details = JsonConvert.SerializeObject(zalo).ToString()
                                });
                                throw ex;
                            }
                        }
                    }
                }
            }
            catch { }
            return(response);
        }