Llamadas externas con Asterisk PJSIP no muestran identificación de llamada en destino
Buenos días,
Antes de nada, planteo este tema sabiendo que el soporte oficial no puede ofrecer ayuda tan específica, pero agradecería que me mantengan el post por si alguien puede echar una mano sobre el tema.
El caso es que me he montado un servidor de Asterisk en mi vivienda como complemento de un sistema de de automatización para domótica (Home Assistant). El propósito es recibir llamadas en mi teléfono móvil cuando se produzcan ciertas situaciones. La parte de recibir la llamada ya he logrado que funcione correctamente, pero por PJSIP, no por SIP. Lo que no logro es que el teléfono móvil muestre el número de teléfono de la FTTH de la que se está llamando. Me consta que a nivel de red está funcionando correctamente, al menos por SIP, porque hago llamadas desde un cliente virtual para móvil (SessionTalk, que es un cliente VoIP para iPhone) y la llamada se recibe con el número de teléfono sin problemas. También puedo hacerlo desde un adaptador ATA SIP (Grandstream HT802). Está configurado con los datos SIP habituales de Movistar y, al llamar desde un teléfono conectado a él a un teléfono móvil, también se recibe correctamente la llamada con su identificador correspondiente. Todo esto me hace suponer que, a nivel de LAN, no hay ningún problema.
El caso es que no entiendo por qué no se envía esta información utilizando PJSIP. Me pregunto si tengo algo (o estoy omitiendo algo) en los archivos pjsip.conf o extensions.conf (dialplan) que estén "machacando" la información relativa a CALLERID.
Dicho esto, paso a poner estas configuraciones y la información a nivel de logs que he podido extraer de Asterisk, por si alguien se ha visto en una situación similar y la ha resuelto. Veréis que algunas líneas está comentadas. Esto es porque son opciones que he ido probando a modo de ensayo/error.
La información a nivel de números de teléfonos reales y contraseñas la he enmascarado.
pjsip.conf
[general] language=es allowguest=no autodomain=yes domain=telefonica.net sipdomain=telefonica.net [transport-udp] type=transport protocol=udp bind=0.0.0.0 [endpoint_internal](!) type=endpoint context=home direct_media=no allow=g729 allow=ulaw allow=alaw allow=gsm [auth_userpass](!) type=auth auth_type=userpass [aor_dynamic](!) type=aor max_contacts=2 remove_existing=yes [100](endpoint_internal) auth=100 aors=100 mwi_from_user=100 [100](auth_userpass) username=100 password=[PASSWORD] [100](aor_dynamic) [101](endpoint_internal) auth=101 aors=101 mwi_from_user=101 [101](auth_userpass) username=101 password=[PASSWORD] [101](aor_dynamic) [endpoint] 100rel=yes [Movistar_reg] type=registration transport=transport-udp outbound_auth=Movistar_auth server_uri=sip:10.31.255.134:5070 client_uri=sip:949xxxxxx@telefonica.net contact_user=949xxxxxx retry_interval=60 expiration=3600 support_path=yes [Movistar_auth] type=auth auth_type=userpass password=949xxxxxx username=949xxxxxx@telefonica.net realm=telefonica.net [Movistar_aor] type=aor max_contacts=2 contact=sip:949xxxxxx@telefonica.net qualify_frequency=60 qualify_timeout=30 support_path=yes ;send_rpid=yes ;send_pai=yes [Movistar_endpoint] type=endpoint transport=transport-udp context=external-calls disallow=all allow=ulaw allow=alaw allow=gsm allow=g729 outbound_auth=Movistar_auth aors=Movistar_aor from_user=949xxxxxx from_domain=telefonica.net callerid=asreceived send_pai=yes rewrite_contact=no send_pai=yes send_rpid=yes [Movistar_identify] type=identify endpoint=Movistar_endpoint match=10.31.255.134
extensions.conf
[general] static=yes writeprotect=yes autofallthrough=yes extenpatternmatchnew=yes clearglobalvars=yes [external-calls] exten => _[67]XXXXXXXX,1,NoOP(Llamadas a moviles) same => n,set(PJSIP/Movistar_endpoint, ${CALLERID(all)})=949xxxxxx <949xxxxxx> ;same => n,NoOp(CALLERID(all)) ;same => n,Set(CALLERID(all)=949xxxxxx <949xxxxxx>) ;same => n,NoOp(CALLERID(all)) ;same => n,set(calltime=${STRFTIME(${EPOCH},,%C%y-%m-%d+%H:%M:%S)}) ;same => n,MixMonitor(/var/lib/asterisk/recordings/inside/${calltime}.-.${CALLERID(num)}-${EXTEN}.wav,b) same => n,DBdeltree(lastcallerout) same => n,set(DB(lastcallerout/lastcallerout)=${EXTEN}) same => n,Dial(PJSIP/Movistar_endpoint/sip:${EXTEN}@telefonica.net:5070,60) same => n,1,Hangup(21)
Endpoint info:
Endpoint: <Endpoint/CID.....................................> <State.....> <Channels.> I/OAuth: <AuthId/UserName...........................................................> Aor: <Aor............................................> <MaxContact> Contact: <Aor/ContactUri..........................> <Hash....> <Status> <RTT(ms)..> Transport: <TransportId........> <Type> <cos> <tos> <BindAddress..................> Identify: <Identify/Endpoint.........................................................> Match: <criteria.........................> Channel: <ChannelId......................................> <State.....> <Time.....> Exten: <DialedExten...........> CLCID: <ConnectedLineCID.......> ========================================================================================== Endpoint: Movistar_endpoint Unavailable 0 of inf OutAuth: Movistar_auth/949xxxxxx@telefonica.net Aor: Movistar_aor 2 Contact: Movistar_aor/sip:949xxxxxx@telefonica.net 9def89a196 Unavail nan Transport: transport-udp udp 0 0 0.0.0.0:5060 Identify: Movistar_identify/Movistar_endpoint Match: 10.31.255.134/32 ParameterName : ParameterValue =================================================================================================== 100rel : yes accept_multiple_sdp_answers : false accountcode : acl : aggregate_mwi : true allow : (ulaw|alaw|gsm|g729) allow_overlap : true allow_subscribe : true allow_transfer : true allow_unauthenticated_options : false aors : Movistar_aor asymmetric_rtp_codec : false auth : bind_rtp_to_media_address : false bundle : false call_group : callerid : asreceived callerid_privacy : allowed_not_screened callerid_tag : codec_prefs_incoming_answer : prefer:pending, operation:intersect, keep:all, transcode:allow codec_prefs_incoming_offer : prefer:pending, operation:intersect, keep:all, transcode:allow [Jul 27 12:20:40] e[1;30m -- e[0mRemote UNIX connection disconnected codec_prefs_outgoing_answer : prefer:pending, operation:intersect, keep:all, transcode:allow codec_prefs_outgoing_offer : prefer:pending, operation:union, keep:all, transcode:allow connected_line_method : invite contact_acl : context : external-calls cos_audio : 0 cos_video : 0 device_state_busy_at : 0 direct_media : true direct_media_glare_mitigation : none direct_media_method : invite disable_direct_media_on_nat : false dtls_auto_generate_cert : No dtls_ca_file : dtls_ca_path : dtls_cert_file : dtls_cipher : dtls_fingerprint : SHA-256 dtls_private_key : dtls_rekey : 0 dtls_setup : active dtls_verify : No dtmf_mode : rfc4733 fax_detect : false fax_detect_timeout : 0 follow_early_media_fork : true force_avp : false force_rport : true from_domain : telefonica.net from_user : 949xxxxxx g726_non_standard : false geoloc_incoming_call_profile : geoloc_outgoing_call_profile : ice_support : false identify_by : username,ip ignore_183_without_sdp : false inband_progress : false incoming_call_offer_pref : local incoming_mwi_mailbox : language : mailboxes : max_audio_streams : 1 max_video_streams : 1 media_address : media_encryption : no media_encryption_optimistic : false media_use_received_transport : false message_context : moh_passthrough : false moh_suggest : default mwi_from_user : mwi_subscribe_replaces_unsolicited : no named_call_group : named_pickup_group : notify_early_inuse_ringing : false one_touch_recording : false outbound_auth : Movistar_auth outbound_proxy : outgoing_call_offer_pref : remote_merge overlap_context : pickup_group : preferred_codec_only : false record_off_feature : automixmon record_on_feature : automixmon refer_blind_progress : true rewrite_contact : false rpid_immediate : false rtcp_mux : false rtp_engine : asterisk rtp_ipv6 : false rtp_keepalive : 0 rtp_symmetric : false rtp_timeout : 0 rtp_timeout_hold : 0 sdp_owner : - sdp_session : Asterisk send_aoc : false send_connected_line : yes send_diversion : true send_history_info : false send_pai : true send_rpid : true set_var : srtp_tag_32 : false stir_shaken : off stir_shaken_profile : sub_min_expiry : 0 subscribe_context : suppress_q850_reason_headers : false t38_bind_udptl_to_media_address : false t38_udptl : false t38_udptl_ec : none t38_udptl_ipv6 : false t38_udptl_maxdatagram : 0 t38_udptl_nat : false timers : yes timers_min_se : 90 timers_sess_expires : 1800 tone_zone : tos_audio : 0 tos_video : 0 transport : transport-udp trust_connected_line : yes trust_id_inbound : false trust_id_outbound : false use_avpf : false use_ptime : false user_eq_phone : false voicemail_extension : webrtc : no Asterisk ending (0).
Comando utilizado para hacer las llamadas de prueba:
originate PJSIP/Movistar_endpoint/sip:686xxxxxx@telefonica.net:5070 application Playback tt-monkeys
¿Alguien puede ayudarme con esto? Gracias por adelantado.
Me contesto yo mismo después de haberlo resuelto con la ayuda de la comunidad de Asterisk. Finalmente, tenía errores de concepto en el dialplan y en el comando con el que hacía la llamada al teléfono móvil externo. Por si a alguien le sirve de referencia, esta es la configuración final con la que he podido hacer una llamada de prueba. Queda limpiar y optimizar el contenido de los archivos, así como terminar de configurar la forma concreta de hacer la llamada de teléfono para que no sea el audio de los monos enfadados de Asterisk, pero al menos así dejo una configuración funcional desde la que se puede partir:
pjsip.conf
[general] language=es allowguest=no autodomain=yes domain=telefonica.net sipdomain=telefonica.net [transport-udp] type=transport protocol=udp bind=0.0.0.0 [endpoint_internal](!) type=endpoint context=home direct_media=no allow=g729 allow=ulaw allow=alaw allow=gsm [auth_userpass](!) type=auth auth_type=userpass [aor_dynamic](!) type=aor max_contacts=2 remove_existing=yes [100](endpoint_internal) auth=100 aors=100 mwi_from_user=100 [100](auth_userpass) username=100 password=[PASSWORD] [100](aor_dynamic) [101](endpoint_internal) auth=101 aors=101 mwi_from_user=101 [101](auth_userpass) username=101 password=[PASSWORD] [101](aor_dynamic) [endpoint] 100rel=yes [Movistar_reg] type=registration transport=transport-udp outbound_auth=Movistar_auth server_uri=sip:10.31.255.134:5070 client_uri=sip:949xxxxxx@telefonica.net contact_user=949xxxxxx retry_interval=60 expiration=3600 support_path=yes [Movistar_auth] type=auth auth_type=userpass password=949xxxxxx username=949xxxxxx@telefonica.net realm=telefonica.net [Movistar_aor] type=aor max_contacts=2 contact=sip:949xxxxxx@telefonica.net qualify_frequency=60 qualify_timeout=30 support_path=yes ;send_rpid=yes ;send_pai=yes [Movistar_endpoint] type=endpoint transport=transport-udp context=external-calls disallow=all allow=ulaw allow=alaw allow=gsm allow=g729 outbound_auth=Movistar_auth outbound_proxy=sip:10.31.255.134:5070\;lr aors=Movistar_aor from_user=949xxxxxx from_domain=telefonica.net callerid=asreceived send_pai=yes rewrite_contact=no send_pai=yes send_rpid=yes [Movistar_identify] type=identify endpoint=Movistar_endpoint match=10.31.255.134extensions.conf
[general] static=yes writeprotect=yes autofallthrough=yes extenpatternmatchnew=yes clearglobalvars=yes [external-calls] exten => _[67]XXXXXXXX,1,NoOP(Llamadas a moviles) same => n,Set(CALLERID(all)=949xxxxxx <949xxxxxx>) same => n,NoOp(CALLERID(all)) ;same => n,set(calltime=${STRFTIME(${EPOCH},,%C%y-%m-%d+%H:%M:%S)}) ;same => n,MixMonitor(/var/lib/asterisk/recordings/inside/${calltime}.-.${CALLERID(num)}-${EXTEN}.wav,b) same => n,DBdeltree(lastcallerout) same => n,set(DB(lastcallerout/lastcallerout)=${EXTEN}) same => n,Dial(PJSIP/Movistar_endpoint/sip:${EXTEN}@telefonica.net:5070,60) same => n,1,Hangup(21)
Comando para hacer la llamada de teléfonooriginate Local/686xxxxxx@external-calls application Playback tt-monkeys
Espero que le sirva a alguien.