Details
- 
    Type:Sub-task 
- 
    Status: Done/Fixed
- 
    Priority:Trivial 
- 
    Resolution: Fixed/Completed
- 
    Affects Version/s: 4.2.0
- 
    Fix Version/s: 4.2.0
- 
    Component/s: None
- 
    Labels:None
Description
A delivery acknowledgment can be monitored via the callback URL.
Code flow:
--------------
The callback file could be: extern/sms.php - [input: carrier=clickatell for example]. This file would be the main handler for processing acknowledgments irrespective of provider.
The callback url could be sth like http://example.com/sites/all/modules/civicrm/extern/sms.php?provider=clickatell
The callback file based on input / provider could ask specific provider files to complete the processing, example - CRM/SMS/Provider/Clickatell.php (if provider=Clickatell)
A base file CRM/SMS/Provider.php parent of CRM/Core/SMS/{$Provider}.php would try to do most of processing by itself. Specific operations only be delegated to CRM/SMS/Provider/{$provider}.php based on the amount of functionality that differs from base class.
Action / post process
---------------------------
For now activity would be updated with status & appropriate message (in location field). 
apiMsgId stored in result column of activity table (by $provider->send() action) would now be used to uniquely identify & update an activity record.
Hooks would allow creating custom tables and updating other params time, cost .. values. 
Since $provider->send() does not set the status initially, any kind of status would be enough to indicate that there has been a callback, and status column would always reflect the current status at that point of time.