whatsapp-docs-mcp 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/ativos_da_conta/outros_ativos/display_names.md +9 -9
- package/docs/ativos_da_conta/outros_ativos/official_business_accounts.md +27 -27
- package/docs/ativos_da_conta/telefones_comerciais/phone_numbers.md +151 -27
- package/docs/business_profiles.md +72 -0
- package/docs/business_scoped_user_ids.md +1533 -0
- package/docs/dados_privacidade_e_politica/encryption.md +1 -1
- package/docs/flows/changelog.md +6 -6
- package/docs/flows/gettingstarted/health_insurance.md +12 -6
- package/docs/flows/gettingstarted/personalised_offer.md +6 -6
- package/docs/flows/gettingstarted/pre_approved_loan.md +6 -6
- package/docs/flows/gettingstarted/purchase_intent.md +2 -2
- package/docs/flows/gettingstarted.md +5 -5
- package/docs/flows/guias.md +1 -1
- package/docs/flows/playground.md +1 -1
- package/docs/flows/referencia.md +1 -1
- package/docs/flows/support.md +3 -3
- package/docs/flows.md +2 -2
- package/docs/insights/analytics.md +200 -66
- package/docs/ligacoes/call_settings.md +129 -57
- package/docs/ligacoes/calling.md +33 -16
- package/docs/ligacoes/integration_examples.md +526 -0
- package/docs/ligacoes/pricing.md +11 -300
- package/docs/ligacoes/sandbox.md +160 -0
- package/docs/ligacoes/video_calling.md +8 -0
- package/docs/mensagens/interactive_media_carousel_messages.md +256 -0
- package/docs/mensagens/interactive_product_carousel_messages.md +181 -0
- package/docs/mensagens/limites_de_mensagens/messaging_limits.md +16 -12
- package/docs/mensagens/recursos_adicionais/media.md +15 -16
- package/docs/mensagens/recursos_adicionais/payload_encryption.md +1 -1
- package/docs/mensagens/tipos_de_mensagens/audio_messages.md +11 -11
- package/docs/mensagens/tipos_de_mensagens/interactive_flow_messages.md +1 -1
- package/docs/mensagens/tipos_de_mensagens/message_with_link.md +1 -1
- package/docs/mensagens_de_marketing/changelog.md +299 -0
- package/docs/mensagens_de_marketing/features.md +184 -0
- package/docs/mensagens_de_marketing/implementacao/get_started.md +17 -21
- package/docs/mensagens_de_marketing/implementacao/send_marketing_messages.md +50 -45
- package/docs/mensagens_de_marketing/measure_conversion.md +132 -0
- package/docs/mensagens_de_marketing/onboarding.md +282 -0
- package/docs/mensagens_de_marketing/recursos/automatic_creative_optimization.md +1 -1
- package/docs/mensagens_de_marketing/recursos/conversion_measurement.md +1 -1
- package/docs/mensagens_de_marketing/visao_geral/overview.md +11 -9
- package/docs/messaging_limits/upcoming_changes.md +1 -1
- package/docs/modelos/authentication_templates/bulk_management.md +145 -0
- package/docs/modelos/authentication_templates/template_preview.md +109 -0
- package/docs/modelos/gerenciamento_de_modelos/components.md +23 -23
- package/docs/modelos/gerenciamento_de_modelos/template_media.md +1 -1
- package/docs/modelos/modelos_de_marketing/marketing_templates.md +20 -20
- package/docs/modelos/modelos_de_marketing/per_user_limits.md +7 -5
- package/docs/modelos/portfolio_pacing.md +30 -0
- package/docs/modelos/visao_geral/overview.md +17 -17
- package/docs/pagamentos/payments_br/cards.md +8 -0
- package/docs/parceiros/gerenciamento/suporte_ao_parceiro/transferring_wabas_to_customers.md +1 -1
- package/docs/parceiros/integracao_de_clientes/cadastro_incorporado/onboarding_business_app_users.md +364 -75
- package/docs/parceiros/integracao_de_clientes/cadastro_incorporado/overview.md +34 -30
- package/docs/parceiros/migrate_existing_whatsapp_number_to_a_business_account.md +40 -0
- package/docs/parceiros/obo_model_deprecation.md +32 -0
- package/docs/parceiros/seja_um_parceiro/get_started_for_solution_partners.md +42 -42
- package/docs/parceiros/seja_um_parceiro/get_started_for_tech_providers.md +38 -142
- package/docs/recado/precos/pricing.md +82 -50
- package/docs/recado/precos/pricing_authentication_international_rates.md +16 -18
- package/docs/recado/precos/pricing_updates_to_pricing.md +1 -1
- package/docs/recado/sobre_a_plataforma/about_the_platform.md +80 -24
- package/docs/recado/sobre_a_plataforma/access_tokens.md +19 -19
- package/docs/referencia/bot_do_whatsapp_business/bot_details_api.md +4 -758
- package/docs/referencia/business/add_phone_numbers_api.md +4 -722
- package/docs/referencia/business/business_account_api.md +8 -0
- package/docs/referencia/business/client_whatsapp_business_accounts_api.md +4 -1002
- package/docs/referencia/business/owned_whatsapp_business_accounts.md +4 -798
- package/docs/referencia/business/whatsapp_business_accounts_api.md +4 -1546
- package/docs/referencia/business/whatsapp_business_partner_onboarding_to_mm_lite_api.md +4 -779
- package/docs/referencia/business/whatsapp_business_pre_verified_phone_number_sharing_api.md +4 -786
- package/docs/referencia/business/whatsapp_business_pre_verified_phone_numbers_api.md +4 -882
- package/docs/referencia/changelog.md +1837 -3
- package/docs/referencia/conta_do_whatsapp_business/assigned_users_management_api.md +4 -2198
- package/docs/referencia/conta_do_whatsapp_business/business_account_api.md +4 -263
- package/docs/referencia/conta_do_whatsapp_business/business_account_extended_credits_api.md +4 -271
- package/docs/referencia/conta_do_whatsapp_business/conversational_automation_api.md +4 -778
- package/docs/referencia/conta_do_whatsapp_business/flows_api.md +4 -1528
- package/docs/referencia/conta_do_whatsapp_business/in_progress_on_behalf_requests_api.md +1 -1
- package/docs/referencia/conta_do_whatsapp_business/migration_intent_api.md +4 -1577
- package/docs/referencia/conta_do_whatsapp_business/obo_mobility_intent_api.md +1 -1
- package/docs/referencia/conta_do_whatsapp_business/phone_number_management_api.md +4 -1682
- package/docs/referencia/conta_do_whatsapp_business/schedules_api.md +4 -1768
- package/docs/referencia/conta_do_whatsapp_business/set_obo_mobility_intent_api.md +1 -1
- package/docs/referencia/conta_do_whatsapp_business/set_solution_migration_intent_api.md +1 -1
- package/docs/referencia/conta_do_whatsapp_business/subscribed_apps_api.md +4 -2174
- package/docs/referencia/conta_do_whatsapp_business/template_api.md +4 -972
- package/docs/referencia/conta_do_whatsapp_business/whatsapp_business_account_activities_api.md +4 -838
- package/docs/referencia/conta_do_whatsapp_business/whatsapp_business_account_api.md +4 -1380
- package/docs/referencia/conta_do_whatsapp_business/whatsapp_business_account_solutions_list_api.md +4 -850
- package/docs/referencia/groups/groups_invite_link_api.md +8 -0
- package/docs/referencia/groups/groups_join_requests_api.md +8 -0
- package/docs/referencia/groups/groups_participants_api.md +8 -0
- package/docs/referencia/groups/groups_query_api.md +8 -0
- package/docs/referencia/grupo/groups_invite_link_api.md +4 -300
- package/docs/referencia/grupo/groups_join_requests_api.md +4 -682
- package/docs/referencia/grupo/groups_participants_api.md +4 -270
- package/docs/referencia/grupo/groups_query_api.md +4 -432
- package/docs/referencia/historico_de_mensagens/whatsapp_business_message_history_events_api.md +4 -862
- package/docs/referencia/inscricao/application_connected_client_businesses.md +4 -808
- package/docs/referencia/inscricao/application_solutions_api.md +4 -870
- package/docs/referencia/inscricao/solution_creation_api.md +4 -820
- package/docs/referencia/intencao_de_migracao_da_conta_do_whatsapp_business/migration_intent_details_api.md +4 -720
- package/docs/referencia/midias/media_api.md +4 -338
- package/docs/referencia/midias/media_download_api.md +4 -156
- package/docs/referencia/numero_da_conta_do_whatsapp/whatsapp_account_number_api.md +4 -774
- package/docs/referencia/perfil_do_whatsapp_business/whatsapp_business_profile_node_api.md +4 -1490
- package/docs/referencia/solucao_do_whatsapp_business/accept_deactivation_request_api.md +4 -758
- package/docs/referencia/solucao_do_whatsapp_business/access_token_api.md +4 -700
- package/docs/referencia/solucao_do_whatsapp_business/reject_deactivation_request_api.md +4 -808
- package/docs/referencia/solucao_do_whatsapp_business/send_deactivation_request_api.md +4 -774
- package/docs/referencia/solucao_do_whatsapp_business/solution_accept_api.md +4 -808
- package/docs/referencia/solucao_do_whatsapp_business/solution_details_api.md +4 -764
- package/docs/referencia/solucao_do_whatsapp_business/solution_reject_api.md +4 -794
- package/docs/referencia/telefone_do_whatsapp_business/block_api.md +4 -538
- package/docs/referencia/telefone_do_whatsapp_business/business_compliance_information_api.md +4 -1604
- package/docs/referencia/telefone_do_whatsapp_business/business_encryption_api.md +4 -1398
- package/docs/referencia/telefone_do_whatsapp_business/calling_api.md +4 -594
- package/docs/referencia/telefone_do_whatsapp_business/encrypted_messages_api.md +4 -478
- package/docs/referencia/telefone_do_whatsapp_business/groups_management_api.md +4 -481
- package/docs/referencia/telefone_do_whatsapp_business/marketing_messages_lite_api.md +4 -311
- package/docs/referencia/telefone_do_whatsapp_business/media_upload_api.md +4 -184
- package/docs/referencia/telefone_do_whatsapp_business/message_api.md +4 -1794
- package/docs/referencia/telefone_do_whatsapp_business/phone_number_api.md +4 -373
- package/docs/referencia/telefone_do_whatsapp_business/phone_number_deregister_api.md +4 -710
- package/docs/referencia/telefone_do_whatsapp_business/phone_number_registration.md +4 -776
- package/docs/referencia/telefone_do_whatsapp_business/phone_number_verification_request_code_api.md +4 -730
- package/docs/referencia/telefone_do_whatsapp_business/register_api.md +4 -407
- package/docs/referencia/telefone_do_whatsapp_business/settings_api.md +4 -670
- package/docs/referencia/telefone_do_whatsapp_business/verify_code_api.md +4 -742
- package/docs/referencia/telefone_do_whatsapp_business/whatsapp_business_account_message_history_api.md +4 -928
- package/docs/referencia/telefone_do_whatsapp_business/whatsapp_business_account_official_business_account_status_api.md +4 -1536
- package/docs/referencia/telefone_do_whatsapp_business/whatsapp_business_account_phone_number_api.md +4 -1596
- package/docs/referencia/telefone_do_whatsapp_business/whatsapp_business_profile_api.md +4 -1474
- package/docs/referencia/telefone_do_whatsapp_business/whatsapp_business_qr_code_api.md +4 -1175
- package/docs/referencia/telefone_do_whatsapp_business/whatsapp_business_qr_code_management_api.md +4 -1311
- package/docs/referencia/telefone_pre_verificado_do_whatsapp_business/request_verification_code_api.md +4 -774
- package/docs/referencia/telefone_pre_verificado_do_whatsapp_business/verify_code_api.md +4 -764
- package/docs/referencia/telefone_pre_verificado_do_whatsapp_business/whatsapp_business_pre_verified_phone_number_api.md +4 -1378
- package/docs/referencia/telefone_pre_verificado_do_whatsapp_business/whatsapp_business_pre_verified_phone_number_partners_api.md +4 -816
- package/docs/referencia/usuario/assigned_whatsapp_business_accounts_api.md +4 -860
- package/docs/referencia/webhooks/whatsapp_incoming_webhook_payload.md +4 -1651
- package/docs/referencia/whatsapp_business_account/extended_credits_api.md +8 -0
- package/docs/referencia/whatsapp_business_phone_number/commerce_settings_api.md +8 -0
- package/docs/suporte/error_codes.md +88 -89
- package/docs/suporte/migrating_from_onprem_to_cloud.md +222 -0
- package/docs/suporte/support.md +77 -186
- package/docs/suporte.md +77 -186
- package/docs/throughput.md +60 -0
- package/docs/upcoming_messaging_limits_changes.md +132 -0
- package/docs/visao_geral/overview.md +354 -306
- package/docs/webhooks/create_webhook_endpoint.md +158 -0
- package/docs/webhooks/reference/messages/group.md +182 -0
- package/docs/webhooks/referencia/account_update.md +27 -27
- package/docs/webhooks/referencia/messages/status.md +35 -35
- package/docs/webhooks/visao_geral/message_echoes.md +1 -1
- package/docs/webhooks/visao_geral/overview.md +23 -15
- package/package.json +1 -1
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
<!-- Source: https://developers.facebook.com/documentation/business-messaging/whatsapp/calling/integration-examples -->
|
|
2
|
+
<!-- Scraped: 2026-01-24T00:28:32.891Z -->
|
|
3
|
+
|
|
4
|
+
# Exemplos de integração
|
|
5
|
+
|
|
6
|
+
Updated: 6 de nov de 2025
|
|
7
|
+
|
|
8
|
+
Este guia explica a integração de plataformas VoIP comuns com a API de Ligações Comerciais do WhatsApp.
|
|
9
|
+
|
|
10
|
+
Este guia tem fins exclusivamente informativos, sem suporte ou garantia de qualquer tipo da Meta ou de qualquer fornecedor. Existem diversas maneiras de integrar, e o guia apresenta apenas uma delas para fins ilustrativos.
|
|
11
|
+
|
|
12
|
+
## Asterisk usando o SIP
|
|
13
|
+
|
|
14
|
+
### Visão geral
|
|
15
|
+
|
|
16
|
+
Este guia explica como configurar a [API de Ligações Comerciais do WhatsApp](/documentation/business-messaging/whatsapp/calling) usando sinalização de SIP com o [Asterisk](https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.asterisk.org%2F&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28), um PBX (Private Branch Exchange) de código aberto. Você aprenderá a configurar o servidor Asterisk, conectar telefones SIP e lidar com ligações recebidas e feitas no WhatsApp.
|
|
17
|
+
|
|
18
|
+
#### Ligações iniciadas pelo usuário
|
|
19
|
+
|
|
20
|
+
- O usuário do WhatsApp disca o número comercial.- A ligação é recebida pelo Asterisk e direcionada por meio de IVR, que solicita ao usuário que insira uma extensão, registrada no mesmo servidor Asterisk.- Depois, a ligação é conectada à extensão especificada.
|
|
21
|
+
|
|
22
|
+
#### Ligações iniciadas pela empresa
|
|
23
|
+
|
|
24
|
+
- O usuário/agente da empresa se registra no Asterisk usando credenciais de SIP (consulte a seção “[Como configurar um telefone VoIP](#configuring-a-voip-phone)”).- O usuário comercial disca a extensão B2C (comunicação entre empresa e consumidor), que é gerenciada por um sistema IVR. O IVR solicita o número do WhatsApp para fazer a ligação.- Depois, a ligação é conectada ao usuário do WhatsApp.
|
|
25
|
+
|
|
26
|
+
WA – O LEG do Asterisk usará SDES para a troca de chave de criptografia de mídia e opus para codec de áudio
|
|
27
|
+
|
|
28
|
+
Asterisk – O Sip UA usará SDES para a troca de chave de criptografia de mídia e opus ou G711 para codec de áudio
|
|
29
|
+
|
|
30
|
+
### Pré-requisitos
|
|
31
|
+
|
|
32
|
+
- Implementação do Asterisk: Asterisk implementado (por exemplo, em uma instância pública na nuvem)- Sistema operacional: qualquer sistema operacional compatível com o Asterisk. Por exemplo: CentOS 9- Domínio: o servidor Asterisk pode ser acessado por um domínio público com certificado válido- API do WhatsApp Business: é necessário registrar um número de telefone comercial do WhatsApp e habilitar as ligações.- Compatibilidade com SIP: o [SIP está habilitado](/documentation/business-messaging/whatsapp/calling/sip#configure-update-sip-settings-on-business-phone-number) no número do WhatsApp Business.- SDES: o [SDES está habilitado](/documentation/business-messaging/whatsapp/calling/sip#configure-sdes-for-srtp-key-exchange-protocol) no número do WhatsApp Business.
|
|
33
|
+
|
|
34
|
+
### Como compilar e instalar o Asterisk
|
|
35
|
+
|
|
36
|
+
Consulte [https://docs.asterisk.org/Getting-Started/Installing-Asterisk/Installing-Asterisk-From-Source/Building-and-Installing-Asterisk/](https://l.facebook.com/l.php?u=https%3A%2F%2Fdocs.asterisk.org%2FGetting-Started%2FInstalling-Asterisk%2FInstalling-Asterisk-From-Source%2FBuilding-and-Installing-Asterisk%2F&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28)
|
|
37
|
+
|
|
38
|
+
Este guia foi testado usando o Asterisk versão 22.5.2
|
|
39
|
+
|
|
40
|
+
### Configuração do Asterisk
|
|
41
|
+
|
|
42
|
+
Esses arquivos de configuração ficam em /etc/asterisk/
|
|
43
|
+
|
|
44
|
+
#### extensions.conf
|
|
45
|
+
|
|
46
|
+
Substitua os espaços reservados a seguir por valores reais
|
|
47
|
+
|
|
48
|
+
- {wa-business-phone-number}: número de telefone do WhatsApp Business- {asterisk-sip-server-dns}: nome DNS do servidor de SIP do Asterisk- incoming\_welcome: incoming\_welcome.wav (não fornecido). Coloque este arquivo em /var/lib/asterisk/sounds- outgoing\_welcome: outgoing\_welcome.wav (não fornecido). Coloque este arquivo em /var/lib/asterisk/sounds
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
[c2b-sub-dial]
|
|
52
|
+
exten => s,1,NoOp()
|
|
53
|
+
same => n,Read(Digits,incoming_welcome,0,,5, 500)
|
|
54
|
+
same => n,Dial(PJSIP/${Digits})
|
|
55
|
+
same => n,Hangup()
|
|
56
|
+
|
|
57
|
+
[whatsapp]
|
|
58
|
+
exten => _10XX,1,NoOp()
|
|
59
|
+
same => n,Dial(PJSIP/${EXTEN})
|
|
60
|
+
same => n,Hangup()
|
|
61
|
+
|
|
62
|
+
;Extension for B2C business call through Meta SIP gateway
|
|
63
|
+
exten => b2c-sip,1,NoOp()
|
|
64
|
+
same => n,Read(Digits,outgoing_welcome,0,,5, 500)
|
|
65
|
+
same => n,Dial(PJSIP/whatsapp/sip:${Digits}@wa.meta.vc)
|
|
66
|
+
|
|
67
|
+
;Extension to handle incoming invite requests from Meta SIP gateway to <wa-business-phone-number>@<asterisk-sip-server-dns>
|
|
68
|
+
exten => _+<wa-business-phone-number>,1,Goto(c2b-sub-dial,s,1)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### Pjsip.conf
|
|
72
|
+
|
|
73
|
+
Substitua os espaços reservados a seguir por valores reais
|
|
74
|
+
|
|
75
|
+
- {wa-business-phone-number}: o número de telefone comercial- {local-net}: rede local do servidor Asterisk- {external-media-address}: IP público da mídia do servidor Asterisk- {external-signaling-address}: IP público da sinalização do servidor Asterisk- {sip-ua-password}: senha escolhida do agente do usuário de SIP- {domain-name}: nome do domínio atribuído ao servidor Asterisk
|
|
76
|
+
|
|
77
|
+
Os arquivos de certificado devem ser colocados em /var/lib/asterisk/certs/fullchain.cer /var/lib/asterisk/certs/cer.key
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
[transport-tls]
|
|
81
|
+
type=transport
|
|
82
|
+
protocol=tls
|
|
83
|
+
bind=0.0.0.0:5061
|
|
84
|
+
cert_file=/var/lib/asterisk/certs/fullchain.cer
|
|
85
|
+
priv_key_file=/var/lib/asterisk/certs/cer.key
|
|
86
|
+
method=sslv23
|
|
87
|
+
external_media_address={external-media-address}
|
|
88
|
+
;External address for SIP signalling
|
|
89
|
+
external_signaling_address={external-signaling-address}
|
|
90
|
+
;Network to consider local used for NAT purposes
|
|
91
|
+
local_net={local-net}
|
|
92
|
+
|
|
93
|
+
[sdes_endpointtemplate](!)
|
|
94
|
+
type=endpoint
|
|
95
|
+
context=whatsapp
|
|
96
|
+
disallow=all
|
|
97
|
+
allow=OPUS
|
|
98
|
+
direct_media=no
|
|
99
|
+
rtp_symmetric=yes
|
|
100
|
+
force_rport=yes
|
|
101
|
+
rewrite_contact=no
|
|
102
|
+
media_use_received_transport=yes
|
|
103
|
+
media_encryption=sdes
|
|
104
|
+
|
|
105
|
+
[authtemplate](!)
|
|
106
|
+
type=auth
|
|
107
|
+
auth_type=userpass
|
|
108
|
+
password={sip-ua-password}
|
|
109
|
+
|
|
110
|
+
[aortemplate](!)
|
|
111
|
+
type=aor
|
|
112
|
+
max_contacts=1
|
|
113
|
+
remove_existing=yes
|
|
114
|
+
|
|
115
|
+
[aoridentitytemplate](!)
|
|
116
|
+
type=identify
|
|
117
|
+
match_header=X-FB-External-Domain: wa.meta.vc
|
|
118
|
+
|
|
119
|
+
;SDES users
|
|
120
|
+
[1000](sdes_endpointtemplate)
|
|
121
|
+
auth=1000_auth
|
|
122
|
+
aors=1000
|
|
123
|
+
|
|
124
|
+
[1000_auth](authtemplate)
|
|
125
|
+
username=1000
|
|
126
|
+
|
|
127
|
+
[1000](aortemplate)
|
|
128
|
+
|
|
129
|
+
[1000](aoridentitytemplate)
|
|
130
|
+
endpoint=1000
|
|
131
|
+
|
|
132
|
+
[1001](sdes_endpointtemplate)
|
|
133
|
+
auth=1001_auth
|
|
134
|
+
aors=1001
|
|
135
|
+
|
|
136
|
+
[1001_auth](authtemplate)
|
|
137
|
+
username=1001
|
|
138
|
+
|
|
139
|
+
[1001](aortemplate)
|
|
140
|
+
|
|
141
|
+
[1001](aoridentitytemplate)
|
|
142
|
+
endpoint=1001
|
|
143
|
+
|
|
144
|
+
[1002](sdes_endpointtemplate)
|
|
145
|
+
auth=1002_auth
|
|
146
|
+
aors=1002
|
|
147
|
+
|
|
148
|
+
[1002_auth](authtemplate)
|
|
149
|
+
username=1002
|
|
150
|
+
|
|
151
|
+
[1002](aortemplate)
|
|
152
|
+
|
|
153
|
+
[1002](aoridentitytemplate)
|
|
154
|
+
endpoint=1002
|
|
155
|
+
|
|
156
|
+
[1003](sdes_endpointtemplate)
|
|
157
|
+
auth=1003_auth
|
|
158
|
+
aors=1003
|
|
159
|
+
|
|
160
|
+
[1003_auth](authtemplate)
|
|
161
|
+
username=1003
|
|
162
|
+
|
|
163
|
+
[1003](aortemplate)
|
|
164
|
+
|
|
165
|
+
[1003](aoridentitytemplate)
|
|
166
|
+
endpoint=1003
|
|
167
|
+
|
|
168
|
+
[1004](sdes_endpointtemplate)
|
|
169
|
+
auth=1004_auth
|
|
170
|
+
aors=1004
|
|
171
|
+
|
|
172
|
+
[1004_auth](authtemplate)
|
|
173
|
+
username=1004
|
|
174
|
+
|
|
175
|
+
[1004](aortemplate)
|
|
176
|
+
|
|
177
|
+
[1004](aoridentitytemplate)
|
|
178
|
+
endpoint=1004
|
|
179
|
+
|
|
180
|
+
[1005](sdes_endpointtemplate)
|
|
181
|
+
auth=1005_auth
|
|
182
|
+
aors=1005
|
|
183
|
+
|
|
184
|
+
[1005_auth](authtemplate)
|
|
185
|
+
username=1005
|
|
186
|
+
|
|
187
|
+
[1005](aortemplate)
|
|
188
|
+
|
|
189
|
+
[1005](aoridentitytemplate)
|
|
190
|
+
endpoint=1005
|
|
191
|
+
|
|
192
|
+
;This endpoint maps to an IVR for C2B calls
|
|
193
|
+
[c2b-sip](sdes_endpointtemplate)
|
|
194
|
+
|
|
195
|
+
[c2b-sip](aortemplate)
|
|
196
|
+
|
|
197
|
+
[c2b-sip]
|
|
198
|
+
type=identify
|
|
199
|
+
endpoint=c2b-sip
|
|
200
|
+
match_header=X-FB-External-Domain: wa.meta.vc
|
|
201
|
+
|
|
202
|
+
;special endpoint for Meta SIP Gateway integration
|
|
203
|
+
;This endpoint maps to an IVR for B2C calls
|
|
204
|
+
[b2c-sip](sdes_endpointtemplate)
|
|
205
|
+
|
|
206
|
+
[b2c-sip](aortemplate)
|
|
207
|
+
|
|
208
|
+
[whatsapp](sdes_endpointtemplate)
|
|
209
|
+
type=endpoint
|
|
210
|
+
transport=transport-tls
|
|
211
|
+
disallow=all
|
|
212
|
+
allow=opus,ulaw,alaw
|
|
213
|
+
aors=whatsapp
|
|
214
|
+
from_user={wa-business-phone-number}
|
|
215
|
+
from_domain={domain-name}
|
|
216
|
+
outbound_auth=whatsapp
|
|
217
|
+
|
|
218
|
+
[whatsapp]
|
|
219
|
+
type=aor
|
|
220
|
+
contact=sip:wa.meta.vc
|
|
221
|
+
|
|
222
|
+
[whatsapp]
|
|
223
|
+
type=identify
|
|
224
|
+
endpoint=whatsapp
|
|
225
|
+
|
|
226
|
+
[whatsapp]
|
|
227
|
+
type=auth
|
|
228
|
+
auth_type=digest
|
|
229
|
+
password={meta-sip-user-password}
|
|
230
|
+
username={wa-business-phone-number}
|
|
231
|
+
realm=*
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
#### rtp.conf
|
|
235
|
+
|
|
236
|
+
```
|
|
237
|
+
[general]
|
|
238
|
+
; Hostname or address for the STUN server used for determining the external
|
|
239
|
+
; IP address and port an RTP session can be reached at. The port number is
|
|
240
|
+
; optional. If omitted default value of 3478 will be used. This option is
|
|
241
|
+
; disabled by default. Name resolution occurs at load time, and if DNS is
|
|
242
|
+
; used, name resolution will occur repeatedly after the TTL expires.
|
|
243
|
+
;
|
|
244
|
+
; e.g. stundaddr=mystun.server.com:3478
|
|
245
|
+
;
|
|
246
|
+
stunaddr=stun.l.google.com:19302
|
|
247
|
+
|
|
248
|
+
rtpstart=10000
|
|
249
|
+
rtpend=60000
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Como configurar um telefone VoIP
|
|
253
|
+
|
|
254
|
+
Baixe e instale um cliente de telefone por software (por exemplo, [Linphone](https://l.facebook.com/l.php?u=https%3A%2F%2Fwww.linphone.org%2Fen%2Fdownload&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28)) para testar chamadas iniciadas pela empresa e pelo usuário.
|
|
255
|
+
|
|
256
|
+
#### Configuração da conta
|
|
257
|
+
|
|
258
|
+
- Selecione uma extensão para se cadastrar como um UA do SIP (extensões 1001 a 1005).- Abra Preferências.- Em “Contas de SIP”, clique em “Adicionar conta”.- Insira os seguintes dados:
|
|
259
|
+
- Endereço de SIP: por exemplo, sip:1001@{asterisk-sip-server-dns}- Endereço do servidor SIP: por exemplo, sip:{asterisk-sip-server-dns};transport=tls- Transporte: TLS- Desabilitar ICE- Habilitar o AVPF- Desabilite a opção "Publicar informações de presença"- Confirme e salve a conta.- Digite a senha quando solicitado (ou seja, {sip-ua-password})- Depois de conectar, retorne para Preferências e selecione a aba "Áudio". Habilite todos os codecs de áudio.- Na aba "Ligações e conversa":
|
|
260
|
+
- Selecione “Criptografia”- Escolha "SRTP-SDES".- Habilite a opção "A criptografia é obrigatória"- Confirme as configurações
|
|
261
|
+
|
|
262
|
+
### Lista de verificação final
|
|
263
|
+
|
|
264
|
+
- Verifique se os arquivos de configuração incluem os números, as senhas e os nomes de domínio corretos.- Verifique se o seu firewall permite as portas de SIP (5061/TLS) e de RTP (10000-20000).- Para saber mais sobre a configuração de senha do SIP, consulte a [documentação da API de Nuvem do WhatsApp](/documentation/business-messaging/whatsapp/calling/sip).
|
|
265
|
+
|
|
266
|
+
### Solução de problemas
|
|
267
|
+
|
|
268
|
+
#### Não é possível registrar o UA do SIP
|
|
269
|
+
|
|
270
|
+
Confirme se o URL do SIP está correto e se o domínio está apontando para o servidor Asterisk. Execute o host {domain-name} para verificar se o endereço IP está apontando para o servidor Asterisk
|
|
271
|
+
|
|
272
|
+
## FreeSWITCH usando SIP
|
|
273
|
+
|
|
274
|
+
### Visão geral
|
|
275
|
+
|
|
276
|
+
Este guia explica como configurar a [API de Ligações Comerciais do WhatsApp](/documentation/business-messaging/whatsapp/calling) usando o sinalizador de SIP com o [FreeSWITCH](https://l.facebook.com/l.php?u=https%3A%2F%2Fsignalwire.com%2Ffreeswitch&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28), uma estrutura de comunicação de código aberto. Você aprenderá a configurar o servidor FreeSWITCH, conectar telefones SIP e lidar com ligações do WhatsApp iniciadas pelo usuário e pela empresa.
|
|
277
|
+
|
|
278
|
+
#### Ligações iniciadas pelo usuário
|
|
279
|
+
|
|
280
|
+
- O usuário do WhatsApp disca o número comercial.- A ligação é recebida pelo FreeSWITCH e direcionada por meio de IVR, que solicita ao usuário que insira a extensão de um agente, registrada no mesmo servidor FreeSWITCH.- Depois que a extensão for inserida, a ligação será conectada ao agente especificado.
|
|
281
|
+
|
|
282
|
+
#### Ligações iniciadas pela empresa
|
|
283
|
+
|
|
284
|
+
- O usuário/agente da empresa se registra no FreeSWITCH usando credenciais de SIP (consulte a seção [Como configurar um telefone VoIP](/documentation/business-messaging/whatsapp/calling/integration-examples#configuring-a-voip-phone) para saber mais).- O usuário empresarial disca a extensão b2c-sip (comunicação entre empresa e consumidor), que é gerenciada por um IVR. Então, o IVR solicita o número do WhatsApp para fazer a ligação.- Depois que o número é inserido, a ligação é conectada ao usuário do WhatsApp via SIP.
|
|
285
|
+
|
|
286
|
+
WA – O LEG do FreeSWITCH usa SDES para a troca de chave de criptografia de mídia com Opus como o codec de áudio FreeSWITCH – O LEG SIP UA usa SDES para a troca de chave de criptografia de mídia com codecs de áudio Opus ou G.711.
|
|
287
|
+
|
|
288
|
+
### Pré-requisitos
|
|
289
|
+
|
|
290
|
+
- Implementação do FreeSWITCH: FreeSWITCH implementado (por exemplo, em uma instância pública na nuvem)- Sistema operacional: qualquer sistema operacional compatível com o FreeSWITCH. Por exemplo: CentOS 9- Domínio: servidor FreeSWITCH acessível via domínio público com certificado válido- API do WhatsApp Business: é necessário registrar um número de telefone comercial do WhatsApp e [habilitar as ligações](https://developers.facebook.com/documentation/business-messaging/whatsapp/calling/call-settings).- Compatibilidade com SIP: o [SIP está habilitado](/documentation/business-messaging/whatsapp/calling/sip#configure-update-sip-settings-on-business-phone-number) no número do WhatsApp Business.
|
|
291
|
+
- Observação: o FreeSWITCH é configurado para ouvir a porta 5081 para TLS.- SDES: o [SDES está habilitado](/documentation/business-messaging/whatsapp/calling/sip#configure-sdes-for-srtp-key-exchange-protocol) no número do WhatsApp Business.
|
|
292
|
+
|
|
293
|
+
### Como compilar e instalar o FreeSWITCH
|
|
294
|
+
|
|
295
|
+
Consulte [https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/](https://l.facebook.com/l.php?u=https%3A%2F%2Fdeveloper.signalwire.com%2Ffreeswitch%2FFreeSWITCH-Explained%2FInstallation%2F&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28)
|
|
296
|
+
|
|
297
|
+
Este guia foi testado usando o FreeSWITCH versão 22.5.2. O FreeSWITCH usa Sofia (uma biblioteca de agentes de usuário de código aberto para o protocolo SIP). Sofia v1.13.17 foi usada para este guia
|
|
298
|
+
|
|
299
|
+
#### Configuração do FreeSWITCH
|
|
300
|
+
|
|
301
|
+
Esses arquivos de configuração ficam em /usr/share/freeswitch/etc/freeswitch
|
|
302
|
+
|
|
303
|
+
**wa-biz-api-dialplan.xml**
|
|
304
|
+
|
|
305
|
+
Coloque o plano de discagem em /usr/share/freeswitch/etc/freeswitch/dialplan/default/wa-biz-api-dialplan.xml
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
<include><extension name="c2b_calls_sip_ivr"><!--Dial plan is selected if the sip request is coming from Meta--><condition field="${sip_from_host}" expression="^wa.meta.vc$"><!--Verify the ip from where the request is coming, compare the ip with the Meta white listed ip's--><action application="check_acl" data="${network_addr} whatsapp_allow normal_clearing"/><!--Enable encrypted media using SDES--><action application="set" data="rtp_secure_media=true"/><action application="answer"/><!--Add silence stream for 1 sec so that the media path is established between whatsapp and freeswitch to avoid audio clipping--><action application="playback" data="silence_stream://1000"/><action application="play_and_get_digits" data="2 5 3 7000 # $${base_dir}/sounds/incoming_welcome.wav $${base_dir}/sounds/incoming_invalid.wav extension \d+"/><!--While the call is being bridged, play a ringtone for the caller--><action application="set" data="ringback=%(2000, 4000, 440.0, 480.0)"/><!--Offer G711 and Opus for FreeSWITCH-SIP UA leg --><action application="export" data="nolocal:absolute_codec_string=PCMA,PCMU,OPUS@48000h@20i"/><action application="bridge" data="user/${extension}"/><action application="hangup"/></condition></extension><extension name="b2c_calls_ivr"><condition field="destination_number" expression="^b2c-sip$"><!--Enable encrypted media using SDES--><action application="set" data="rtp_secure_media=true"/><action application="answer"/><action application="playback" data="silence_stream://1000"/><action application="set" data="caller_id_check=${caller_id_number}"/><action application="play_and_get_digits" data="2 12 3 20000 # $${base_dir}/sounds/outgoing_welcome.wav $${base_dir}/sounds/outgoing_invalid.wav whatsapp_number \d+"/><action application="log" data="INFO [whatsapp_number] is ${whatsapp_number}"/><!--While the call is being bridged, play a ringtone for the caller--><action application="set" data="ringback=%(2000, 4000, 440.0, 480.0)"/><!--Offer only OPUS--><action application="export" data="nolocal:absolute_codec_string=OPUS@48000h@20i,OPUS@8000h@20i"/><!--Bridge the call by calling META SIP with the WA Number--><action application="bridge" data="sofia/gateway/whatsapp/+${whatsapp_number}"/><action application="hangup"/></condition></extension></include>
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
Os arquivos de áudio devem ser colocados em /usr/share/freeswitch/sounds (não fornecidos)
|
|
312
|
+
|
|
313
|
+
- incoming\_welcome.wav- Incoming\_invalid.wav- outgoing\_welcome.wav- outgoing\_invalid.wav
|
|
314
|
+
|
|
315
|
+
**whatsapp.xml**
|
|
316
|
+
|
|
317
|
+
Este arquivo configura o portal do WhatsApp. Copie o arquivo para /usr/share/freeswitch/etc/freeswitch/sip\_profiles/external/whatsapp.xml
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
<!--Gateway configuration for Meta SIP--><!--replace {phone-number},{meta-sip-password} and {domain-name} before starting FreeSWITCH--><include><gateway name="whatsapp"><param name="username" value="{phone-number}"/><param name="password" value="{meta-sip-password}"/><param name="register" value="false"/><param name="realm" value="wa.meta.vc"/><param name="from-user" value="{phone-number}"/><param name="from-domain" value="{domain-name}"/></gateway></include>
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
Substitua os espaços reservados a seguir por valores reais
|
|
324
|
+
|
|
325
|
+
- {phone-number}: número de telefone do WhatsApp Business- {meta-sip-password}: senha de SIP emitida pela Meta. Para saber mais sobre a configuração de senha do SIP, consulte a [documentação da API de Nuvem do WhatsApp](/documentation/business-messaging/whatsapp/calling/sip#include-sip-user-password).- {domain-name}: nome DNS do seu servidor SIP FreeSWITCH
|
|
326
|
+
|
|
327
|
+
**acl.conf.xml**
|
|
328
|
+
|
|
329
|
+
Abra /usr/share/freeswitch/etc/freeswitch/autoload\_configs/acl.conf.xml
|
|
330
|
+
|
|
331
|
+
Adicione a seguinte lista no elemento `network-lists`.
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
<!--IP addresses from Meta that are allowed to send SIP requests via the gateway. Keep this up to date--><list name="whatsapp_allow" default="deny"><node type="allow" cidr="31.13.24.0/21"/><node type="allow" cidr="31.13.64.0/18"/><node type="allow" cidr="45.64.40.0/22"/><node type="allow" cidr="57.141.0.0/21"/><node type="allow" cidr="57.141.8.0/22"/><node type="allow" cidr="57.141.12.0/23"/><node type="allow" cidr="57.144.0.0/14"/><node type="allow" cidr="66.220.144.0/20"/><node type="allow" cidr="69.63.176.0/20"/><node type="allow" cidr="69.171.224.0/19"/><node type="allow" cidr="74.119.76.0/22"/><node type="allow" cidr="102.132.96.0/20"/><node type="allow" cidr="103.4.96.0/22"/><node type="allow" cidr="129.134.0.0/16"/><node type="allow" cidr="147.75.208.0/20"/><node type="allow" cidr="157.240.0.0/16"/><node type="allow" cidr="163.70.128.0/17"/><node type="allow" cidr="163.77.128.0/17"/><node type="allow" cidr="173.252.64.0/18"/><node type="allow" cidr="179.60.192.0/22"/><node type="allow" cidr="185.60.216.0/22"/><node type="allow" cidr="185.89.216.0/22"/><node type="allow" cidr="204.15.20.0/22"/></list>
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**vars.xml**
|
|
338
|
+
|
|
339
|
+
Modifique /usr/share/freeswitch/etc/freeswitch/vars.xml
|
|
340
|
+
|
|
341
|
+
```
|
|
342
|
+
Add line <X-PRE-PROCESS cmd="set" data="rtp_secure_media=mandatory"/> under <include>
|
|
343
|
+
|
|
344
|
+
Replace
|
|
345
|
+
<X-PRE-PROCESS cmd="set" data="default_password=1234"/>
|
|
346
|
+
with (substitute {sip_ua_password} with your password)
|
|
347
|
+
<X-PRE-PROCESS cmd="set" data="default_password={sip-ua-password}"/>
|
|
348
|
+
|
|
349
|
+
Replace
|
|
350
|
+
<X-PRE-PROCESS cmd="set" data="domain=$${local_ip_v4}"/>
|
|
351
|
+
with (substitute {domain-name} with your FreeSWITCH sip server dns)
|
|
352
|
+
<X-PRE-PROCESS cmd="set" data="domain={domain-name}”/>
|
|
353
|
+
|
|
354
|
+
Replace
|
|
355
|
+
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=stun:stun.freeswitch.org"/>
|
|
356
|
+
with (substitute {external-ip} with your FreeSWITCH public ip)
|
|
357
|
+
<X-PRE-PROCESS cmd="set" data="external_sip_ip={external-ip}"/>
|
|
358
|
+
|
|
359
|
+
Replace
|
|
360
|
+
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=stun:stun.freeswitch.org"/>
|
|
361
|
+
with (substitute {external-ip} with your FreeSWITCH public ip)
|
|
362
|
+
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip={external-ip}"/>
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
**internal.xml**
|
|
366
|
+
|
|
367
|
+
Modifique /usr/share/freeswitch/etc/freeswitch/sip\_profiles/internal.xml. Procure por
|
|
368
|
+
|
|
369
|
+
```
|
|
370
|
+
<param name="sip-trace" value="no"/>
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
Substitua por
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
<param name="sip-trace" value="yes"/>
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
**external.xml**. Modifique /usr/share/freeswitch/etc/freeswitch/sip\_profiles/external.xml
|
|
380
|
+
|
|
381
|
+
```
|
|
382
|
+
Replace
|
|
383
|
+
<param name="sip-trace" value="no"/>
|
|
384
|
+
with
|
|
385
|
+
<param name="sip-trace" value="yes"/>
|
|
386
|
+
|
|
387
|
+
Replace
|
|
388
|
+
<param name="tls" value="$${external_ssl_enable}"/>
|
|
389
|
+
with
|
|
390
|
+
<param name="tls" value="true"/>
|
|
391
|
+
|
|
392
|
+
Replace
|
|
393
|
+
<!--<param name="tls-cert-dir" value=""/>-->
|
|
394
|
+
with
|
|
395
|
+
<param name="tls-cert-dir" value="/usr/share/freeswitch/etc/freeswitch/certs"/>
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
Verifique se os certificados estão em /usr/share/freeswitch/etc/freeswitch/certs.
|
|
399
|
+
|
|
400
|
+
### Lista de verificação final
|
|
401
|
+
|
|
402
|
+
- Verifique se os arquivos de configuração incluem os números, as senhas e os nomes de domínio corretos.- Verifique se o seu firewall permite as portas de SIP (5081/TLS) e de RTP (10000-20000).- Para saber mais sobre a configuração de senha do SIP, consulte a [documentação da API de Nuvem do WhatsApp](/documentation/business-messaging/whatsapp/calling/sip#include-sip-user-password).
|
|
403
|
+
|
|
404
|
+
### Solução de problemas
|
|
405
|
+
|
|
406
|
+
#### Não é possível registrar o UA do SIP
|
|
407
|
+
|
|
408
|
+
Confirme se o URL do SIP está correto e se o domínio está apontando para o servidor Freeswitch. Execute o host {domain-name} para verificar se o endereço IP está apontando para o servidor Freeswitch
|
|
409
|
+
|
|
410
|
+
#### Rastrear mensagens de SIP
|
|
411
|
+
|
|
412
|
+
Inicie o CLI (/usr/share/freeswitch/bin/fs\_cli) para visualizar mensagens de SIP
|
|
413
|
+
|
|
414
|
+
## FreeSWITCH usando a Graph API e sinalização de webhook
|
|
415
|
+
|
|
416
|
+
### Visão geral
|
|
417
|
+
|
|
418
|
+
Este guia explica como configurar a [API de Ligações Comerciais do WhatsApp](/documentation/business-messaging/whatsapp/calling) usando [sinalização da API de Nuvem do WhatsApp](/documentation/business-messaging/whatsapp/calling/business-initiated-calls) com [FreeSWITCH](https://l.facebook.com/l.php?u=https%3A%2F%2Fsignalwire.com%2Ffreeswitch&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28), uma estrutura de comunicação de código aberto e [Janus](https://l.facebook.com/l.php?u=https%3A%2F%2Fjanus.conf.meetecho.com%2F&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28), um servidor WebRTC de uso geral. Você aprenderá a configurar o servidor FreeSWITCH, conectar telefones SIP e lidar com ligações recebidas e feitas no WhatsApp.
|
|
419
|
+
|
|
420
|
+

|
|
421
|
+
|
|
422
|
+
#### Ligações iniciadas pelo usuário
|
|
423
|
+
|
|
424
|
+
- O usuário do WhatsApp disca o número comercial.- A ligação é recebida pelo servidor de webhook que a encaminha para o servidor FreeSWITCH via plugin Janus SIP.- A ligação é recebida pelo FreeSWITCH e direcionada por meio de IVR, que solicita ao usuário que insira uma extensão, registrada no mesmo servidor FreeSWITCH.- Depois, a ligação é conectada à extensão especificada.
|
|
425
|
+
|
|
426
|
+
#### Ligações iniciadas pela empresa
|
|
427
|
+
|
|
428
|
+
- O usuário/agente da empresa se registra no FreeSWITCH usando credenciais de SIP (consulte a seção "[Como configurar um telefone VoIP](/documentation/business-messaging/whatsapp/calling/integration-examples#configuring-a-voip-phone)").- O usuário empresarial disca a extensão b2c-sip (comunicação entre empresa e consumidor), que é gerenciada por um IVR. O IVR solicita o número do WhatsApp para fazer a ligação.- O FreeSWITCH conecta a ligação à extensão registrada no plugin Janus SIP, que a traduz em uma solicitação de API para a Meta.- Depois, a ligação é conectada ao usuário do WhatsApp.
|
|
429
|
+
|
|
430
|
+
O servidor Janus fica entre o WA e o FreeSWITCH e converte mídia do WA (compatível com WebRTC com troca de chave DTLS) em mídia negociada pelo FreeSWITCH (troca de chave SDES).
|
|
431
|
+
|
|
432
|
+
Asterisk – O SIP UA usará SDES para a troca de chave de criptografia de mídia e Opus ou G711 para codec de áudio
|
|
433
|
+
|
|
434
|
+
### Pré-requisitos
|
|
435
|
+
|
|
436
|
+
- Implementação do FreeSWITCH: FreeSWITCH implementado (por exemplo, em uma instância pública na nuvem)- Implementação do Janus: pode ser implementado na mesma máquina que o FreeSWITCH- Sistema operacional: qualquer sistema operacional compatível com o FreeSWITCH. Por exemplo: CentOS 9- Domínio: os servidores FreeSWITCH e Webhook podem ser acessados por um domínio público com certificado válido- API do WhatsApp Business: é necessário registrar um número de telefone comercial do WhatsApp e [habilitar as ligações](https://developers.facebook.com/documentation/business-messaging/whatsapp/calling/call-settings).- Webhooks: configure o URL de retorno de ligação do webhook apontando para o nome de domínio do servidor de webhook
|
|
437
|
+
|
|
438
|
+
### Integração com sinalização da API de Nuvem
|
|
439
|
+
|
|
440
|
+
Será necessário implementar um módulo de integração entre o WhatsApp e o Janus para traduzir as mensagens de sinalização da API de Nuvem para o plugin Janus SIP e vice-versa.
|
|
441
|
+
|
|
442
|
+
Você precisará do seguinte:
|
|
443
|
+
|
|
444
|
+
- Um servidor de webhook para receber eventos de webhook de ligações da Meta- Um módulo da Graph API para enviar mensagens de ligação para a Meta- Uma implementação do [plugin Janus para SIP](https://l.facebook.com/l.php?u=https%3A%2F%2Fjanus.conf.meetecho.com%2Fdocs%2Fsip&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28) para conectar ao Janus. A implementação do plugin Janus se conectará ao FreeSWITCH usando a extensão 1000, que é reservada para conexão
|
|
445
|
+
|
|
446
|
+
Ligações iniciadas pela empresa
|
|
447
|
+
|
|
448
|
+
- O módulo receberá um convite de SIP por meio do plugin Janus SIP na extensão 1000. O SIP INVITE é convertido em uma [solicitação da Graph API](https://developers.facebook.com/documentation/business-messaging/whatsapp/calling/business-initiated-calls#initiate-call). O SDP recebido no SIP INVITE é enviado verbatim como a oferta do SDP para o WA por meio da chamada da Graph API- Quando a ligação é aceita pelo usuário do WhatsApp, um webhook é recebido. Ao receber o webhook, o plugin SIP Janus aceita o SIP INVITE, passando o SDP de resposta no [webhook de conexão](https://developers.facebook.com/documentation/business-messaging/whatsapp/calling/business-initiated-calls#call-connect-webhook)
|
|
449
|
+
|
|
450
|
+
Ligações iniciadas pelo usuário
|
|
451
|
+
|
|
452
|
+
- O servidor de webhook recebe uma ligação por meio de uma mensagem de webhook contendo o SDP da oferta. Ao receber o convite de ligação, o plugin SIP Janus envia um convite para o FreeSWITCH via extensão 1000. A extensão de destino é **c2b-sip.**- Quando o plugin SIP Janus recebe o 200 OK do SIP, um pedido de aceitação de ligação via Graph API é enviado para a Meta para aceitar a ligação recebida, transmitindo o SDP recebido como parte da resposta do SIP.
|
|
453
|
+
|
|
454
|
+
### Como compilar e instalar o Janus
|
|
455
|
+
|
|
456
|
+
Consulte [https://github.com/meetecho/janus-gateway](https://l.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Fmeetecho%2Fjanus-gateway&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28). Este guia foi testado usando a versão 1.3.3
|
|
457
|
+
|
|
458
|
+
### Configuração do Janus
|
|
459
|
+
|
|
460
|
+
**janus.jcfg**
|
|
461
|
+
|
|
462
|
+
Modifique o janus.jcfg, que pode ser encontrado em /usr/share/janus/etc/janus/janus.jcfg. Defina nat\_1\_1\_mapping para o IP público do servidor Janus.
|
|
463
|
+
|
|
464
|
+
Para iniciar o Janus
|
|
465
|
+
|
|
466
|
+
```
|
|
467
|
+
/usr/share/janus/bin/janus --debug-level=6 --libnice-debug=on -S stun.l.google.com:19302 --log-file=/var/log/janus.log --config=/usr/share/janus/etc/janus/janus.jcfg
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### Como compilar e instalar o FreeSWITCH
|
|
471
|
+
|
|
472
|
+
Consulte [https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/](https://l.facebook.com/l.php?u=https%3A%2F%2Fdeveloper.signalwire.com%2Ffreeswitch%2FFreeSWITCH-Explained%2FInstallation%2F&h=AT01XdDaDlKwME36VMVEY5oITOXwHjqzPV2wEnYietTEE_6uM2gcABBISADz8MxFX22bBH43bn0NMbSCJAwmqNUz1fWip5xu_ozYSQJJXtMGvS22Xt5uTf6lLVL8EbSvfirxyaGvehOrP_rkXgVfB3pOB28)
|
|
473
|
+
|
|
474
|
+
Este guia foi testado usando o FreeSWITCH versão 22.5.2. O FreeSWITCH usa Sofia (uma biblioteca de agentes de usuário de código aberto para o protocolo SIP). Sofia v1.13.17 foi usada para este guia
|
|
475
|
+
|
|
476
|
+
**Configuração do FreeSWITCH** Esses arquivos de configuração ficam em /usr/share/freeswitch/etc/freeswitch
|
|
477
|
+
|
|
478
|
+
**wa-biz-api-dialplan.xml**
|
|
479
|
+
|
|
480
|
+
Coloque o plano de discagem em /usr/share/freeswitch/etc/freeswitch/dialplan/default/wa-biz-api-dialplan.xml
|
|
481
|
+
|
|
482
|
+
```
|
|
483
|
+
<include><extension name="c2b_calls_ivr"><condition field="destination_number" expression="^c2b-sip$"><action application="set" data="rtp_secure_media=true"/><action application="answer"/><!--Add silence stream for 1 sec so that the media path is established between whatsapp and freeswitch to avoid audio clipping. TODO: Investigate if silence can be removed--><action application="playback" data="silence_stream://1000"/><action application="play_and_get_digits" data="2 5 3 7000 # $${base_dir}/sounds/incoming_welcome.wav $${base_dir}/sounds/incoming_invalid.wav extension \d+"/><!--While the call is being bridged, play a ringtone for the caller--><action application="set" data="ringback=%(2000, 4000, 440.0, 480.0)"/><!--WA calls bridged via Janus through extension 1000 only support OPUS. However, the callee might be restricted to other codecs e.g. G722--><!--Therefore , don't restrict to OPUS for C2B calls and offer more codecs to the caller. Transcoding between OPUS and the negotiated codec by the caller--><!--will happen in freeswitch--><action application="export" data="nolocal:absolute_codec_string=PCMA,PCMU,OPUS@48000h@20i,G722"/><action application="bridge" data="user/${extension}"/><action application="hangup"/></condition></extension><extension name="b2c_calls_ivr"><condition field="destination_number" expression="^b2c-sip$"><action application="set" data="rtp_secure_media=true"/><action application="answer"/><action application="playback" data="silence_stream://1000"/><action application="set" data="caller_id_check=${caller_id_number}"/><action application="log" data="INFO [caller id ] is ${caller_id_check}"/><action application="play_and_get_digits" data="2 12 3 20000 # $${base_dir}/sounds/outgoing_welcome.wav $${base_dir}/sounds/outgoing_invalid.wav whatsapp_number \d+"/><action application="log" data="INFO [whatsapp_number] is ${whatsapp_number}"/><!--Add the whatsapp number entered by the user as a custom sip header, Janus will use this WA user number in API request to Meta--><action application="export" data="sip_h_X-WhatsApp-Number=${whatsapp_number"/><!--While the call is being bridged, play a ringtone for the caller--><action application="set" data="ringback=%(2000, 4000, 440.0, 480.0)"/><!--WA calls bridged via Janus through extension 1000 only support OPUS. However, the caller might be restricted to other codecs e.g. G722--><!--Therefore , don't restrict to OPUS for B2C calls and let caller select other codecs--><!--However, force transcoding to OPUS by only offering OPUS to Janus--><action application="export" data="nolocal:absolute_codec_string=OPUS@48000h@20i,PCMU,PCMA"/><!--Bridge the call to extension 1000 to which capi-calling is registered via Janus to route calls to WhatsApp--><action application="bridge" data="user/1000"/><action application="hangup"/></condition></extension></include>
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
Os arquivos de áudio devem ser colocados em /usr/share/freeswitch/sounds (não fornecidos)
|
|
487
|
+
|
|
488
|
+
- incoming\_welcome.wav- Incoming\_invalid.wav- outgoing\_welcome.wav- outgoing\_invalid.wav
|
|
489
|
+
|
|
490
|
+
**internal.xml**
|
|
491
|
+
|
|
492
|
+
Modifique /usr/share/freeswitch/etc/freeswitch/sip\_profiles/internal.xml. Procure por
|
|
493
|
+
|
|
494
|
+
```
|
|
495
|
+
<param name="sip-trace" value="no"/>
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
Substitua por
|
|
499
|
+
|
|
500
|
+
```
|
|
501
|
+
<param name="sip-trace" value="yes"/>
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
### Como configurar um telefone VoIP
|
|
505
|
+
|
|
506
|
+
Consulte a [seção anterior](/documentation/business-messaging/whatsapp/calling/integration-examples#configuring-a-voip-phone).
|
|
507
|
+
|
|
508
|
+
### Lista de verificação final
|
|
509
|
+
|
|
510
|
+
- Verifique se os arquivos de configuração incluem os números, as senhas e os nomes de domínio corretos.- Verifique se o seu firewall permite as portas de SIP (5061/TLS) e de RTP (10000-20000).- Para saber mais sobre a configuração de senha do SIP, consulte a [documentação da API de Nuvem do WhatsApp](/documentation/business-messaging/whatsapp/calling/sip).
|
|
511
|
+
|
|
512
|
+
### Solução de problemas
|
|
513
|
+
|
|
514
|
+
#### Não é possível registrar o UA do SIP
|
|
515
|
+
|
|
516
|
+
Confirme se o URL do SIP está correto e se o domínio está apontando para o servidor Asterisk. Execute o host {domain-name} para verificar se o endereço IP está apontando para o servidor Asterisk
|
|
517
|
+
|
|
518
|
+
#### Rastrear mensagens de SIP
|
|
519
|
+
|
|
520
|
+
Inicie o CLI (/usr/share/freeswitch/bin/fs\_cli) para visualizar mensagens de SIP
|
|
521
|
+
|
|
522
|
+
Você achou esta página útil?
|
|
523
|
+
|
|
524
|
+

|
|
525
|
+
|
|
526
|
+

|