feat: Add support for sending CSAT surveys via templates (Whatsapp Twilio) (#13143)
Fixes https://linear.app/chatwoot/issue/CW-6189/support-for-sending-csat-surveys-via-approved-whatsapp --------- Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: Vinay Keerthi <11478411+stonecharioteer@users.noreply.github.com> Co-authored-by: iamsivin <iamsivin@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
68
app/services/twilio/csat_template_api_client.rb
Normal file
68
app/services/twilio/csat_template_api_client.rb
Normal file
@@ -0,0 +1,68 @@
|
||||
class Twilio::CsatTemplateApiClient
|
||||
def initialize(twilio_channel)
|
||||
@twilio_channel = twilio_channel
|
||||
end
|
||||
|
||||
def create_template(request_body)
|
||||
HTTParty.post(
|
||||
"#{api_base_path}/v1/Content",
|
||||
headers: api_headers,
|
||||
body: request_body.to_json
|
||||
)
|
||||
end
|
||||
|
||||
def submit_for_approval(approval_url, template_name, category)
|
||||
request_body = {
|
||||
name: template_name,
|
||||
category: category
|
||||
}
|
||||
|
||||
HTTParty.post(
|
||||
approval_url,
|
||||
headers: api_headers,
|
||||
body: request_body.to_json
|
||||
)
|
||||
end
|
||||
|
||||
def delete_template(content_sid)
|
||||
HTTParty.delete(
|
||||
"#{api_base_path}/v1/Content/#{content_sid}",
|
||||
headers: api_headers
|
||||
)
|
||||
end
|
||||
|
||||
def fetch_template(content_sid)
|
||||
HTTParty.get(
|
||||
"#{api_base_path}/v1/Content/#{content_sid}",
|
||||
headers: api_headers
|
||||
)
|
||||
end
|
||||
|
||||
def fetch_approval_status(content_sid)
|
||||
HTTParty.get(
|
||||
"#{api_base_path}/v1/Content/#{content_sid}/ApprovalRequests",
|
||||
headers: api_headers
|
||||
)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def api_headers
|
||||
{
|
||||
'Authorization' => "Basic #{encoded_credentials}",
|
||||
'Content-Type' => 'application/json'
|
||||
}
|
||||
end
|
||||
|
||||
def encoded_credentials
|
||||
if @twilio_channel.api_key_sid.present?
|
||||
Base64.strict_encode64("#{@twilio_channel.api_key_sid}:#{@twilio_channel.auth_token}")
|
||||
else
|
||||
Base64.strict_encode64("#{@twilio_channel.account_sid}:#{@twilio_channel.auth_token}")
|
||||
end
|
||||
end
|
||||
|
||||
def api_base_path
|
||||
'https://content.twilio.com'
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user