The IIF file format for Amtelco scripts
Amtelco IIF files explained!
Today we're going to explore the generalized file-format for .iif
files generated by the Amtelco Intelligent Series Supervisor application.
Before We Begin
I've observed a correlation between attendance and my weekly emails, so I'm going to do my best to keep up with these. As always, we publish our schedules online ahead of time!
Add Tues @ 12pm Eastern and Thur @ 3pm Eastern to your calendar so you don't forgot!
Office Hours
A weekly meeting with Call Theory and fellow customers to learn, ask questions, and network over general IT, call center, and Amtelco topics.
- Tuesday, 8/27 @ 3pm Eastern
- Zoom Link and additional information
Scripting Sessions
A weekly meeting to train Amtelco Intelligent Series scripting topics from Basic, Intermediate, and Advanced topics on a repeating schedule.
- Thursday, 8/29 @ 12pm Eastern
- Zoom Link and additional information
- Topics - Advanced II: Working with APIs
Examining IIF Files
The goal behind this exercise is to better understand how scripting works underneath-the-hood: perhaps that will lead to improved tools for testing and development.
About IIF files
I'm not exactly sure what IIF is supposed to mean, but I'm going to go ahead and designate it the Intelligent Import Format (IIF) for the time being. I couldn't find details on Tech Helper and the only other reference I found was InfImpFile which sounds like it's for Infinity and not Intelligent. (Although, stranger things have happened.)
Essentially, you can export one or more Intelligent Series account scripts, system scripts, or templates to a stand-alone .iif
file which can then be copied to another Amtelco system and imported.
This appears to be a proprietary file-format used only by Amtelco
This file format and import/export feature is what has enabled and empowered Amtelco call centers to share scripting with peers - something NAEO members regularly do, for example.
The Intelligent Import Format
In a nutshell, .iif
files are binary data-formats that include concatenated, individually gzipped sections of XML
or JSON
.
The first string in the binary file will be one of following, determining whether the import will be done via the XML or JSON file versions:
SCRIPT_EXPORT_FILE_0
- Script sections are inXML
formatSCRIPT_EXPORT_FILE_1
- Script sections are inJSON
format
Once we know how the script data is formatted (presumably used for Amtelco's import procedure) we need the name of the script and the metadata (everything except the script's screens):
Template - Your Script
- The gzipped
XML
orJSON
script structure (Shared, Initialize, Load, etc.)
After the script level details, you have a listing of all the screens for your script. Each screen works similar to script level setup:
- The name of the screen, like
Screen
- The gzipped
XML
orJSON
screen details
Finally, this structure is repeated for each script within your IIF file, using the name of each script as the delimiter.
Structure of IIF Files
Effectively, we end up with something like this for XML:
It appears to be using [\0]\r\n
i.e., an optionally-null-terminated CRLF
to distinguish each screen within a script and the name of the script to delimit multiple included scripts.
This seems to also work for the JSON-encoded versions (which appear to be few and far between, even in IS 5.6):
What does this all mean?
Being able to decode the IIF format means we can entertain some additional tools for our customers. Here are some of the ideas of come up with so far:
- (Long Term) Use generative AI tools to create new client scripts and save them to
.iif
format for importing. - (Medium Term) Filter and remove credentials, keywords, API keys, and other private data that might be included in scripting.
- (Short Term) Script visualizations to showcase, test, and confirm call flow for clients and internal reporting.
This will also allow us to create conversion tools - something that might come in handy when migrating to (or from) Amtelco Intelligent Series - reducing vendor lock-in and making things a little more agile along the way.
P.S. The tool in my screenshots is CyberChef - https://gchq.github.io/CyberChef/ (running locally, of course)