2

Rich Call Data

Introduction

Rich Call Data (RCD) uses the foundational elements of STIR/SHAKEN to deliver additional information about a call, including Caller Display Name, Reason for the Call, a brand icon or logo, and other information. Rich Call Data leverages the framework and infrastructure created by the STIR/SHAKEN framework to securely extend information about the calling party.

For a call to carry the attributes enhanced by RCD, it must follow the authentication, signing, and verification steps defined in the STIR/SHAKEN framework.

Sansay supports RCD via the use of REST and SIP interface standards. What's different in environments that support RCD starts from NSS' STI-AS response. NSS response will carry two PASSporTs: shaken and rcd.

Queries continue to follow the defined SIP and REST STI interfaces.

For specific technical information on RCD please refer to ATIS-1000094 and IETF STIR PASSPORT RCD.

Inside an RCD PASSporT

This is an example of an Identity Header carrying an RCD PASSporT:

eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NTc2NTA3LCJjcm4iOiIiLCJyY2QiOnsibmFtIjogIlNhbnNheSBTdXBwb3J0Igp9LCJyY2RpIjp7Cn19.qWIt6Kejy5rXq6uFjG99KPIAfGHxKnH7Hxc1oA1JieGe30r5nj7bunv03E8PHsvC59G-BI4N0L2sZ0244uyHbA;info=<https://cr.sansay.com/test.pem>;alg=ES256;ppt=\"rcd\"

This is the decoded version of the payload 😉

{
  "dest": {
    "tn": [
      "18587542211"
    ]
  },
  "orig": {
    "tn": "18587542200"
  },
  "iat": 1697576507,
  "crn": "",
  "rcd": {
    "nam": "Sansay Support"
  },
  "rcdi": {}
}

An RCD PASSporT complements SHAKEN PASSPorTs with information on the caller. In terms of SIP protocol, RCD is delivered as an additional Identity header as illustrated below.

The structure of an RCD PASSporT will vary based on its contents. Here are some of they key-pair values/elements that may exist on a RCD passport:

  • Display Name (nam). This the Display Name often associated with the From or P-Asserted-Identity headers Display Name. nam must exist in an rcd passport.
  • Reason for Call (crn).  Used to convey the reason for the call. When being used for SIP this claim is to be used as a parameter (;call-reason) in the Call-Info header. 
    Call-Info: <cid:12155551000@example.com>;purpose=jcard;call-reason= \
      "Rendezvous for Little Nellie"
  • Alternate Presenation Number (apn). Its intended semantics are to convey a number that the originating user is authorized to show to called parties in lieu of their default number.
  • Icon (icn). Is an optional HTTPS URL reference to an image resource. This icon key value should be used as a base or default method of associating an image with a calling party.  When being used for SIP [RFC3261] this claim key value used to protect the Call-Info header field with a purpose parameter value of "icon" as described in Section 20.9 [RFC3261]. Example as follows:
    Call-Info: <http://wwww.example.com/alice/photo.jpg>;
      purpose=icon
    
  • JSON Card Object (jcd). This is a passport built using a JSON object.

Identity Headers with RCD

Here are some examples of RCD PASSPorTs with different RCD objects:

Calling Name Only

eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NjY5NjQwLCJjcm4iOiIiLCJyY2QiOnsibmFtIjogIlNhbnNheSBUQUMiCn0sInJjZGkiOnsKfX0.IfNgK8FzYCCB8UZACJBgjVMCdDkgB6Lbv84WTyyxstFGjw2GRA_ruizLW8a3RV0iZvKmb1kJ9jcKUPl9acgt6w;info=<https://cr.sansay.com/invalid>;alg=ES256;ppt=\"rcd\"

Calling Name and Reason for Call

eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NjY5NTY1LCJjcm4iOiJQcm9kdWN0IFVwZGF0ZSIsInJjZCI6eyJuYW0iOiAiU2Fuc2F5LCBJbmMiCn0sInJjZGkiOnsKfX0.3YhaogcKFh7fLXbZ7b3iyFKZ7uJzzMGJpLRhGseO374siCF7tzOnWIj_C63PoGwSZVryyvwKWooX-UvvsSEMhQ;info=<https://cr.sansay.com/invalid>;alg=ES256;ppt=\"rcd\"

jCard object

A JCard is a JSON object that represents a vCard (Virtual Business Card).

eyJhbGciOiJFUzI1NiIsInBwdCI6ImRpdiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiY3Iuc2Fuc2F5LmNvbS8xMTE3XzF5X25ldyJ9.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NDgwNTA4LCJjcm4iOiJ0ZXN0NCIsInJjZCI6InsgICAgICJqY2QiOiBbInZjYXJkIiwgICAgIFsgWyJ2ZXJzaW9uIix7fSwidGV4dCIsIjQuMCJdLCAgICAgICBbImZuIix7fSwidGV4dCIsIlEgQnJhbmNoIl0sICAgICAgIFsib3JnIix7fSwidGV4dCIsIlNhbnNheSB0ZXN0OiQlXiYqXiJdLCAgICAgICBbInBob3RvIix7fSwidXJpIiwiaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy8wLzA1L1BhZHJlX2xvZ29fJTI4NjR4NjQlMjkucG5nIl0sICAgICAgIFsibG9nbyIse30sInVyaSIsImh0dHBzOi8vc2NhLWNyLnNhbnNheS5jb20vcmNkL1JDRF90ZXN0XzY0XzIuanBnIl0sICAgICAgIFsibG9nbyIse30sInVyaSIsImh0dHBzOi8vc2NhLWNyLnNhbnNheS5jb20vcmNkL1JDRF90ZXN0XzY0XzIuanBnIl0gICAgIF0gXSwgICAgICJuYW0iOiAiVGVzdCIsICJhcG4iOiIxMjM0NSIgICB9IiwgInJjZGkiOiJ7CiJqY2QvMS8zLzMiIDogInNoYTI1Ni1nczRUeWN6bUxZWmJFMFNrRDJ0SDUyRklNakVlK3NrZWQ3SHFKSWhSK2hVIiwKImpjZC8xLzQvMyIgOiAic2hhMjU2LUFCbmZ4TE10WThFNUtxSmtydElsUEI0TUw3Q1NGdmppekNhYnY3aTdTYlUiLAoiamNkLzEvNS8zIiA6ICJzaGEyNTYtQUJuZnhMTXRZOEU1S3FKa3J0SWxQQjRNTDdDU0Z2aml6Q2FidjdpN1NiVSIKfSJ9.IuxIrsBeIHeOZnSsevAEB6B70MW8CQCtrpAVimMn1rqXqrGSI1hs9AbQctYDP9tlQBJLwNApAeHyvHOkvyeVNw;info=<cr.sansay.com/1117_1y_new>;alg=ES256;ppt=\"rcd\"

REST API

Here's an example request using REST

curl https://nss.sansay.com:3334/stir/v1/signing -k -X POST
  -H 'Content-Type: application/json'
  -H 'Accept: application/json'
  -H 'X-RequestID: 12345678'
  -d "{\"signingRequest\":{\"orig\":{\"tn\":\"18587542200\"},\"dest\":{\"tn\":[\"18587542211\"]},\"iat\":$(date +%s)}}"

Or simplified using get_shaken.sh

bash get_shaken.sh 8587542200 8587542211 192.168.10.159

Response

< HTTP/1.1 200 OK
< X-DNS-Prefetch-Control: off
< X-Frame-Options: SAMEORIGIN
< Strict-Transport-Security: max-age=15552000; includeSubDomains
< X-Download-Options: noopen
< X-Content-Type-Options: nosniff
< X-XSS-Protection: 1; mode=block
< X-RequestID: 892cb1577741ea562740
< Content-Type: application/json; charset=utf-8
< Content-Length: 911
< ETag: W/"38f-KFYfBnWojDFKqa9RpikTiFdBaZo"
< Date: Wed, 18 Oct 2023 22:54:00 GMT
{"signingResponse":{"identity":["eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxODU4NzU0MjIxMSJdfSwiaWF0IjoxNjk3NjY5NjQwLCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwib3JpZ2lkIjoiMzllNmE1ZjAtNmUwOS0xMWVlLWI3MTAtYzFjMWJmZGM4ODg4In0.VUr3sK-KTsyQ6ChfEpYW79MLaaIAwbYu6OHjbhms4Dv4YCmbx8CSL6FMfXIVay1S0ulEtm7TjomAKEF5yQ4_6Q;info=<https://cr.sansay.com/invalid>;alg=ES256;ppt=\"shaken\"","eyJhbGciOiJFUzI1NiIsInBwdCI6InJjZCIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jci5zYW5zYXkuY29tL2ludmFsaWQifQ.eyJkZXN0Ijp7InRuIjpbIjE4NTg3NTQyMjExIl19LCJvcmlnIjp7InRuIjoiMTg1ODc1NDIyMDAifSwiaWF0IjoxNjk3NjY5NjQwLCJjcm4iOiIiLCJyY2QiOnsibmFtIjogIlNhbnNheSBUQUMiCn0sInJjZGkiOnsKfX0.IfNgK8FzYCCB8UZACJBgjVMCdDkgB6Lbv84WTyyxstFGjw2GRA_ruizLW8a3RV0iZvKmb1kJ9jcKUPl9acgt6w;info=<https://cr.sansay.com/invalid>;alg=ES256;ppt=\"rcd\""]}}

SIP Interface

Interop

Interop testing remains one of the most important aspects of RCD since it requires that not only originating Service Providers support it but also Transit and Termination Providers. We will be posting details soon on how to test RCD.

Reply

null